面向对象(二)
继承和多态
(一). 继承的本质: 将父类对象中子类可见的成员(包括属性, 方法)复制到子类对象中,
将父类融入子类, 之后分析子类运行过程时, 不用考虑父类.
多态的本质: 父类引用指向子类对象
1 public class Parent { // 研究继承的本质 2 public void f1() { 3 System.out.println("Parent f1"); 4 f2(); 5 } 6 7 public void f2() { 8 System.out.println("Parent f2"); 9 } 10 }
1 public class Child extends Parent { 2 public void f1() { 3 System.out.println("Child f1"); 4 super.f1(); 5 } 6 7 @Override 8 public void f2() { 9 System.out.println("Child f2"); 10 } 11 }
1 public class T { 2 public static void main(String[] args) { 3 new Child().f1(); 4 } 5 }
(二). 继承和多态 重写 (注: 此处的接口看作父类)
|
|
属性 |
方法 |
继承 |
普通类重写 |
能用子类独有属性, 父类独有属性, 子父类属性同名时, 用子类的值 |
能用子类的独有的方法, 父类独有方法(继承接口除外, 父类所有方法必须重写), 子父类的方法同名时, 用子类的方法 |
抽象类重写 |
|||
接口重写 |
|||
多态 |
普通类重写 |
只能用父类的属性, 和对应的属性值 |
只能用父类的方法(包含父类独有, 被子类重写的同名方法) |
抽象类重写 |
|||
接口重写 |
用一句话总结:
1. 继承: 子类有的就用子类的, 子类没有的就用父类的成员变量或方法
2. 多态: 只能用父类的成员变量和成员方法, 如果子类继承后对父类的某个同名方法
进行重写, 则用重写后的方法. (此处不妨联系起基因突变一起理解, 对同一方
法的不同表现, 所以子类有重写某个方法时, 则用重写后的方法)
(三). 多态要满足的条件:
1. 有继承关系
2. 父类引用指向子类对象
3. 子类对同名方法进行重写