2018-02-15

继承的注意事项:

虽然子类中构造方法默认有一个super()

初始化的时候,不是按照那个顺序进行的。

而是按照分层初始化进行的。super仅仅表示要先初始化分类数据,在初始化子类数据。

继承中成员方法的关系:

A:子类和父类中方法声明不一样 -- 正常

B:子类和父类中方法声明一样

查找顺序:子类->父类->如果还找不到就报错

方法重写:子类中出现和父类中方法声明一模一样的方法。(方法覆盖,方法复写)

应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类的方法。这样即沿袭了父类的功能,又定义了子类特有的内容。

注意事项:

A:父类中私有方法不能被重写

父类私有方法子类根本就无法继承

B:子类重写父类方法时,访问权限不能更低

C:父类静态方法,子类也必须通过静态方法进行重写(本质不算重写,只是现象如此)

子类重写父类方法时,最好声明一模一样


---------------以上为昨天补齐的部分----------------------------------------


由于继承中存在一个现象方法重写(override),父类的功能会被子类覆盖掉,为了避免这种情况,java提供了一个关键字:final

1、final:最终的意思,常见的是它可以修饰类,方法,变量。

特点:

final可以修饰类,该类不能被继承

final可以修饰方法,该方法不能被重写(override)

final可以修饰变量,该变量不能被重新复制。因为这个变量其实是常量。

{

常量:

A:字面值常量

"hello",10,true

B:自定义常量

final int x = 10;

}

{

面试题:final修饰成员变量

可以修饰成员变量

基本类型:基本类型的值不能变;

引用类型:地址值不能变,但对象的堆内存的值是可以改变的。(既是内容可以变)

修饰变量的初始化时机

A:被final修饰的变量只能被赋值一次。

B:在构造方法完毕前(非静态常量)。

}

2、多态

同一个对象(事物),在不同时刻表现出来的不同状态。

多态的前提:

A:要有继承关系

B:要有方法重写

C:要有父类引用指向子类对象

父 father = new 子();

多态中的成员访问特点:

A:成员变量

编译看左边,运行看左边

B:构造方法

同以前的,先父再子

C:成员方法

编译看左边,运行看右边

D:静态方法

编译看左边,运行看左边

(静态和类相关,算不上重写,所以,访问还是左边的)

由于成员方法存在方法重写,所以它运行看右边。

多态的好处:

A:提高了代码的维护性(继承保证)

B:提高了代码的扩展性(由多态保证)

多态的弊端:

不能使用子类的特有功能。

使用子类的特有功能:

A:创建子类对象,调用子类的方法。(可以,但是很多时候不合理,而且太占内存)

B:把父类的引用强制转化为子类的引用(向下转型)

{

对象间的转型问题:

向上转型:

Fu f = new Zi();

向下转型:

zi z = new (Zi)f;//要求该f必须是能够转换为Zi的。

}

你可能感兴趣的:(2018-02-15)