多态:成员变量
父类 F Father f = new Son();
栈内存中的父类在堆内存中寻找,只能找父类的this,子类的super
f.method(静态) //Father.method(); 编译看左边,运行看左边 非动态 = 静态
f.method( ) //f.method(); 编译看左边,运行看右边
f.num; //(变量) 编译看左边,运行看左边
抽象类中可以有抽象方法 也可以有非抽象方法
接口中的方法必须全部都是abstract的,接口中的量都是常量,public static final int
而接口中方法public abstract void XX()
**! 子类重写父类的方法权限一定要高于父类的权限 !**
接口并没有构造方法,因为是干爹,不被继承,子类的super关键字访问的不是他
常量在构造方法初始化完成之前赋值是可以的
多态中引用数据类型转换:
与基本数据类型相反的是,引用数据类型在进行数据类型转换的时候范围是相反的
例如: Person p = new Son(); 隐式转换,小转大
假设子类中有一个独有的方法method(),但是由于Person p,栈内存中p的指针在堆内存中只能寻找到父类的方法
所以多态Person p = new Son();反而把权限限制了
强制类型转换(大-小)
Son s = (Son)p;
s.method(); //将p强制转换为son类型的引用(s)时,就可以访问子类的独有的方法method了
类与类之间的关系:单继承(亲爹),多层继承(亲爹,爷爷)
类与接口之间的关系:实现,多实现(干爹)
接口与接口之间的关系:单继承多继承都可以
|
|