一、 继承
- 继承的概念:
继承是类与类的一种关系, 是一种”is a” 的关系
注: Java是单继承 - 继承的好处:
子类拥有父类的所有属性和方法
private修饰的无效 - 语法规则:
class 子类 extends 父类
例如
class Dog exends Animal {
}
二、 Java中的方法重写
- 什么是方法的重写:
如果子类对继承父类的方法不满意, 是可以重写父类的继承的方法的, 当调用方法时会优先调用子类的方法。 - 语法规则:
a. 返回值类型
b. 方法名
c. 参数类型及个数
都要与父类继承的方法相同, 才叫方法的重写
三、 Java中的继承初始化顺序
继承的初始化顺序
- 初始化父类再初始子类
- 先执行初始化对象中属性, 再执行构造方法中的初始化
四、Java中的final的使用
final 关键字
使用final关键字做标识有“最终的”含义
final可以修饰类, 方法, 属性和变量
final修饰类, 则该类不允许被继承
final修饰方法, 则该方法不允许被覆盖(重写)
final修饰属性
则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)
或在构造方法中赋值(但只能选其一)
final修饰变量, 则该变量的值只能赋一次值, 即变为常量
五、 Java中的super的使用
super关键字: 在对象的内部使用, 可以代表父类对象 - 访问父类的属性
super.age - 访问父类的方法
super.eat();
super的应用
子类的构造的过程中必须调用其父类的构造方法。
如果子类的构造方法中没有显示调用父类的构造方法, 则系统默认调用父类的无参的构造方法
如果显式的调用构造方法,必须在子类的构造方法的第一行。
如果子类构造方法中既没有显式调用父类的构造方法,而父类又没有无参的构造方法, 则编译出错
六、 Java中的Object类
object类是所有类的父类, 如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类
Object类中的方法,适合所有子类 - toString()方法
在Object类里面定义toString()方法的时候返回的对象的哈希code码(对象地址字符串)
可以通过重写toString()方法表示出对象的属性 - equals()方法
比较的是对象的引用是否指向同一块内存地址
Dog dog new Dog();
一般情况下比较两个对象时比较他的值是否一致, 所以要进行重写
七、 多态
对象的多种形态 - 引用的多态
父类的引用可以指向本类的对象
父类的引用可以指向子类的对象 - 方法的多态
创建本类对象时, 调用的方法为本类方法
创建子类对象时, 调用的方法为子类重写的方法或者继承的方法
新建一个父类
package cn.yiixue.java.object;
public class Animal {
public void eat() {
System.out.println(“动物具有吃的能力”);
}
}
子类Dog
package cn.yiixue.java.object;
public class Dog extends Animal {
public void eat() {
System.out.println(“狗是吃肉的”);
}
public void watchDoor() {
System.out.println(“狗具有看门的能力”);
}
}
子类Cat
package cn.yiixue.java.object;
public class Cat extends Animal{
}
入口类
package cn.yiixue.java.object;
public class Initail {
public static void main(String[] args) {
Animal obj1 = new Animal();
Animal obj2 = new Dog();
Animal obj3 = new Cat();
//子类的引用指向父类的对象
//Dog obj3 = new Animal(); //错误
obj1.eat();//调用的是父类的方法
obj2.eat();//调用子类的方法
obj3.eat();//调用子类继承父类的方法
//obj2.watchDoor(); //这个是不允许的
}
}
八、 多态中的引用类型转换
- 向上类型转换(隐式/自动类型转换), 是小类型到大类型的转换
- 向下类型转换(强制类型转换), 是大类型到小类型的转换
- instanceof运算符, 来解决引用对象的类型, 避免类型转换的安全性问题
例如 :
Dog dog = new Dog();
Animal animal = dog; //自动类型提升, 向上类型转换
Dog dog2 = (Dog) animal;//向下类型转换 强制类型转换
if(animal instanceof Cat) {
Cat cat = (Cat) animal; //1 .编译时Cat类型 2. 运行时Dog类型
} else {
System.out.println(“无法进行类型转换”);
}
九、 Java中的抽象类
- 语法定义:
抽象类前使用abstract关键字修饰, 则该类为抽象类 - 应用杨景:
a. 在某些情况下, 某个父类只是知道其子类应该包含怎样的方法, 但无法准确知道这些子类如何实现这些方法。
b. 从多个具有相同特征的类中抽象出一个抽象类, 以这个抽象类作为子类的模板, 从而避免了子类设计的随意性。
- 作用:
限制规定子类必须实现某些方法, 但不关注实现细节
4、 使用规则
a) abstract 定义抽象类
b) abstract定义抽象方法,只有声明, 不需要实现
c) 包含抽象方法的类是抽象类
d) 抽象类中可以包含普通的方法, 也可以没有抽象方法
e) 抽象类不能直接创建, 可以定义引用变量
定义抽象类:
package cn.yiixue.java.abstrac;
public abstract class Telphone {
public abstract void call();
public abstract void message();
}
定义两个子类
package cn.yiixue.java.abstrac;
public class CellPhone extends Telphone {
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println(“通过键盘来打电话”);
}
@Override
public void message() {
// TODO Auto-generated method stub
System.out.println(“通过键盘来发短信”);
}
}
package cn.yiixue.java.abstrac;
public class SmartPhone extends Telphone {
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println(“通过语音打电话 “);
}
@Override
public void message() {
// TODO Auto-generated method stub
System.out.println(“通过语音发短信”);
}
}
定义入口类
package cn.yiixue.java.abstrac;
public class Initail {
public static void main(String[] args) {
// TODO Auto-generated method stub
Telphone tel1 = new CellPhone();
tel1.call();
tel1.message();
Telphone tel2 = new SmartPhone();
tel2.call();
tel2.message();
}
}
十、 Java中的接口
- 接口的概念
类是一种具体实现体, 而接口定义了某一批类所需要遵守的规范, 接口不关心这些类的内部数据, 也不关心这些类里方法的实现细节, 它只规定这些类里必须提供某些方法。
2、 接口的定义
和类定义不同, 定义接口不再使用class关键字, 而是使用 interface 关键字
接口定义 的基本语法:
【修饰符】 interface 接口名 [extends 父接口1, 父接口2…]
{
零个到多个常量定义…
零个到多个抽象方法的定义..
}
接口是用来被继承\被实现的, 修饰符一般建议用public 注意: 不能使用private和protected修饰接口
- 接口定义
常量:
接口中的属性是常量 , 即使定义时不添加
public static final 修饰符, 系统也会自动加上.
方法:
接口中的方法只能是抽象方法, 总是使用, 即使定义时不添加public abstract修饰符, 系统也会自动加上. - 使用接口
一个类可以实现一个或多个接口, 实现接口使用implements关键字。Java中一个类只能继承一个父类, 是不够灵活的, 通过实现多个接口可以做补充
继承父类实现接口的语法为:
[修饰符] class 类名 extends 父类 implements 接口1, 接口2.
{
类体部分 //如果继承了抽象类, 需要实现继承的抽象方法; 要实现接口中的抽象方法
}
如果要继承父类, 继承父类必须在实现接口之前
使用接口:
接口在使用过程中, 还经常与匿名内部类配合使用
匿名内部类就是没有名字的内部类, 多用于关注实现而不关注 实现类的名称
语法格式:
Interface i = new Interface() {
public void method() {
System.out.println(“匿名内部类实现接口的方式”);
}
};
IPlayGame ip3 = new IPlayGame() {
@Override
public void playGame() {
// TODO Auto-generated method stub
System.out.println(“通过匿名内部类的方式实现接口”);
}
};
ip3.playGame();
new IPlayGame() {
@Override
public void playGame() {
// TODO Auto-generated method stub
System.out.println(“通过匿名内部类的方式实现接口”);
}
}.playGame();
十一、 UML简介
- UML概念
又称统一建模语言或标准建模语言 - 常用UML图
用例图
序列图
类图 - UML建模工具
Visio Rational Rose PowerDesign