data:2020/2/16
多态
多态是指允许程序中出现重名现象
java语言中含有方法重载与对象多态两种形式的多态
方法重载:
在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同
对象多态:
子类对象可以与父类对象进行相互的转换,而且根据其使用的子类的不同完成的功能也不同
多态前提
1.要有继承关系
2.要有方法重载
3.要有父类对象引用子类对象 Father f = new Son()
多态的好处和弊端
好处:
提高了代码的维护性(继承保证),提高了代码的扩展性(多态保证)
弊端:
不能使用子类特有的属性和方法(要有父类对象引用子类对象的时候,如果**f.print()**在父类中没有定义,那么就会报错)
所以在已经向上转型之后可以来个向下强转
向上转型:
Father f = new Son();
向下转型:
Son son = (Son)f
关键字instanceof
判断前面的引用是否是后面的数据类型
if (a instanceof Cat) {
...
} else if (a instanceof Dog) {
...
} else {
...
}
抽象类abstact
抽象类是为方法覆盖而提供的类结构
1.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或是接口
2.抽象类不能实例化,可由具体的子类实例化
3.抽象类的子类:要么也是抽象类,要么重写抽象类中所有的抽象方法
抽象类的成员特点:
4.成员变量:既可以是变量,也可以是常量,不能用abstart修饰
5.构造方法:有,用于子类访问父类构造函数并初始化(super())
6.成员方法:既可以是抽象的(强制子类做的),也可以是非抽象的(子类继承过去的)
abstract不能和哪些关键字共存:
7.static:abstract不能和static共存,因为abstract没有方法体,而static可以用类名直接调用,这么一来就没有意义了
8.finna:abstract不能和finnal共存,一个要重写,一个不能重写
9.private:abstract不能和private共存,abstract是要被子类看到并重写,而private不能让子类看到
接口(interface)
接口的成员特点:
1.成员变量:只能是变量,并且是静态和公共的(默认public static finnal)
2.接口中的方法都是抽象的(默认public abstract)
3.接口中没有构造方法,一个类默认继承的是Object类
类与类:继承关系,单继承,可以多层继承
类与接口:实现关系,可以单实现,也可以多实现
接口和接口:继承关系,可以单继承,也可以多继承
抽象类与接口:
抽象类(is a,定义的是共性功能):其实和普通类一样,只是可以定义抽象方法
接口(like a,定义的是扩展功能):属性只能是常量,方法只能是抽象