一 多态
多态前提:
a:要有继承关系。
b:要有方法重写。(没有这条多态没有意义)
c:要有父类引用指向子类对象。
多态中的成员访问特点:(多态不影响构造方法的特点)
1.成员变量:编译看左边(父类),运行看左边(父类)。
2.非静态成员方法:编译看左边(父类)如果父类中没有该方法编译失败,运行看右边(子类)。(动态绑定)
3.静态成员方法: 编译看左边(父类),运行看左边(父类)。(静态绑定,相当于用类名调用) (静态和类相关,算不上重写,所以,访问还是左边的
关键字 instanceof 判断前边的引用是否是后边的数据类型
多态的好处
a:提高了代码的维护性(继承保证)
b:提高了代码的扩展性(由多态保证)(作为参数传递时,才体现出多态的扩展性)
c:可以当作形式参数,可以接收任意子类对象
多态的弊端:不能使用子类的特有属性和行为。
抽象类:
抽象类特点
a:抽象类和抽象方法必须用abstract关键字修饰
abstract class 类名 {}
public abstract void eat();
b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
c:抽象类不能实例化那么,抽象类如何实例化呢?:按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
d:抽象类的子类要么是抽象类,要么重写抽象类中的所有抽象方法
面试题1
问题:一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
答案: 可以 这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成
问题二: abstract 不能和哪些关键字共存
1.abstract和static:被static修饰的方法可直接由类名调用,但是抽象方法是没有意思的
2.abstract和final:被abstract修饰的方法强制子类重写,被final修饰的不让子类重写,所以他两是矛盾的
3.abstract和private:被private修饰的是为了让子类看到并强制重写,被private修饰的不让子类访问,所以他两是矛盾的
二 接口
接口成员特点:(不能有成员变量)
成员变量;只能是常量(具有被final修饰的特点),并且是静态的并公共的。默认修饰符:public static final 这三者的顺序可以改变
建议:自己手动给出。
构造方法:接口没有构造方法(接口是干爹,不是亲爹,默认继承Object类)
成员方法:只能是抽象方法,默认修饰符:public abstract
建议:自己手动给出。
(所以实现接口的类修饰权限一定要是public)
类与类,类与接口:接口与接口的关系
a:类与类继承关系,只能单继承,可以多层继承。
b:类与接口实现关系:可以单实现,也可以多实现,并且还可以在继承一个类的同时实现多个接口。
c:接口与接口继承关系:可以单继承,也可以多继承。
抽象类和接口的区别
A:成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
B:关系区别
类与类:继承,单继承
类与接口:实现,单实现,多实现
接口与接口:继承,单继承,多继承
C:设计理念区别:
抽象类被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。
|
|