今天学习多态与继承方面的知识,还是一句话重在理解。
首先,多态的形式:
简单的说就是父类的引用指向子类的对象。
子父类成员的访问:
1.父类对象的引用,不能访问子类的成员;
2.子类对象的引用,可以访问:
1).从父类继承的成员;
2).自己的成员;
多态的情况(父类指向子类对象):
1.成员变量:
1).父类没有,子类有:编译时,编译错误:找不到符号;
2).父类没有,子类没有:编译时,编译错误:找不到符号;
3).父类有,子类没有:编译通过,运行时:父类的;
4).父类有,子类也有:编译通过。运行时:父类的;
2.成员方法:
1).父类没有,子类有:编译时,编译错误:找不到符号;
2).父类没有,子类没有:编译时,编译错误:找不到符号;
3).父类有,子类没有:编译通过,运行时:父类的;
4).父类有,子类也有:编译通过,运行时:子类的;(方法在运行时是动态绑定的,绑定到当前调用的对象)
汇总:
1.多态时:
1).编译时,如果父类没有,编译错误:找不到符号;
2).运行时,对于被覆盖的成员变量,获取的父类的;对于被重写的成员方法,执行的是子类的;
1.父类对象的引用,不能访问子类的成员;
2.子类对象的引用,可以访问:
1).从父类继承的成员;
2).自己的成员;
多态的情况(父类指向子类对象):
1.成员变量:
1).父类没有,子类有:编译时,编译错误:找不到符号;
2).父类没有,子类没有:编译时,编译错误:找不到符号;
3).父类有,子类没有:编译通过,运行时:父类的;
4).父类有,子类也有:编译通过。运行时:父类的;
2.成员方法:
1).父类没有,子类有:编译时,编译错误:找不到符号;
2).父类没有,子类没有:编译时,编译错误:找不到符号;
3).父类有,子类没有:编译通过,运行时:父类的;
4).父类有,子类也有:编译通过,运行时:子类的;(方法在运行时是动态绑定的,绑定到当前调用的对象)
汇总:
1.多态时:
1).编译时,如果父类没有,编译错误:找不到符号;
2).运行时,对于被覆盖的成员变量,获取的父类的;对于被重写的成员方法,执行的是子类的;
多态之中还有类型的强制转换,我觉得这种对象的强制转换和基本数据类型的转换有点相似。
首先,当我们确定一个父类类型指向某一个之类的对象时,可以将父类类型转换成子类的类型。
如果将一个父类类型转换为子类类型,在转换之前可以先进行判断,使用:instanceof运算符来判断:左边的变量是否是右边的类型
最后,是关于抽象类,抽象类不能被实例化,创建抽象类没意义。
1. 抽象类和一般类区别不大,类中出现不确定抽象的功能时,可以定义抽象方法,抽象方法没有方法主体。
2.抽象类中可以有构造函数用来初始化成员变量.
3.抽象关键字abstract不可以以下关键字共存。
1).static。
2).final : final类表示不能被继承,而abstract类就是被继承的,所以冲突;
final方法表示不能被重写,而abstract方法就是被重写的,所以冲突;
3).private :一个abstract方法就是被重写的,而private的成员在子类中无法访问;
1).static。
2).final : final类表示不能被继承,而abstract类就是被继承的,所以冲突;
final方法表示不能被重写,而abstract方法就是被重写的,所以冲突;
3).private :一个abstract方法就是被重写的,而private的成员在子类中无法访问;