一、什么是继承
面向对象的三大特性: 封装、 继承、多态;
继承就是子类型将父类型的的属性继承到自己类中进行使用,通过继承的方式子类型可以使用父类型的属性和方法,并且,继承只能单重继承,无法多继承,但可以间接继承;
继承其实不只是单单只有这些作用,其实它是一种前置条件,只有有了继承,才有后面的方法覆盖与多态;
继承的注意事项: 子类无法继承父类的私有属性;
父类型构造方法无法被继承;
二、什么是方法覆盖
所谓的方法覆盖 就是当父类型中的方法无法满足子类型的时候,通过不修改父类型方法,只在子类型中进行重写继承过来的方法,以达到满足程序要求;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Test24 { 2 public static void main(String[] args) { 3 4 Dog d = new Dog(); 5 d.move(); 6 // output result: 狗在跑步 7 // d.move() 的运行步骤是 d 引用调用 Dog 中的重写过后的方法 8 } 9 } 10 11 class Dog extends DongWu{ 12 13 public void move(){ 14 System.out.println("狗在跑步"); 15 } 16 // 当对父类型的方法进行重写时,其子类型中的重写方法,其 返回值类型,方法名,形参要全部一致相同,如果有不同的地方,将不构成方法的重载 17 18 } 19 20 class DongWu{ 21 22 private void move(){ 23 System.out.println("DongWu 在移动!"); 24 } 25 }
方法覆盖的注意事项: 1、进行覆盖的方法其修饰符级别不能低于父类型的修饰符级别;
2、构造方法无法被覆盖
3、静态方法不存在覆盖
4、覆盖只针对方法,不针对属性
5、抛出异常只能比父类型少,不能比父类型多
三、什么是多态
多态是一种通过继承的方式来达到程序解耦合的结构方式;
在基本数据类型中,有学到过数据类型转换功能,其实在类与类之间也有类型转换,当然只有两个类或多个类有继承关系的情况下,才有类型转换,转换形式有两种:
—— 子类指向父类: 自动类型转换,且称为向上转型;
—— 父类指向子类: 强制类型转换,且称为向下转型;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Test23 { 2 3 public static void main(String[] args) { 4 5 Animal a = new Tiger(); // 多态 6 // 子类型指向父类型 ,自动类型转换,向上转型 7 a.move(); 8 9 // Tiger i = (Tiger) a; 语法编译都正常,但是会出现运行异常:父类型有可能指向错误,解决方案 10 11 if(a instanceof Tiger) { 12 Tiger i = (Tiger) a; // 多态 13 // 父类型指向子类型,强制类型转换,向下转型 14 i.move(); 15 } 16 } 17 } 18 19 class Animal{ 20 21 public void move() { 22 23 } 24 } 25 26 class Tiger extends Animal{ 27 28 public void move() { 29 System.out.println("老虎在散步"); 30 } 31 } 32 33 class Lion extends Animal{ 34 35 public void move() { 36 System.out.println("老虎在跑步"); 37 } 38 }
在该程序中出现了一个新的关键字 instanceof -----------------> 它的作用是测试它左边的对象是否指向它右边的类的实例,返回boolean类型的数据;这样做的好处是判断两个类的指向,避免运行异常;
四、为什么使用多态,多态的作用是什么
前面提到多态有解耦合的功能,将它运用在程序当中,可以是程序的耦合度更松散,使程序的可扩展性更强;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Test22 { 2 3 public static void main(String[] args) { 4 5 Host zhangsan = new Host(); 6 7 Dog erHa = new Dog(); 8 9 zhangsan.feed(erHa); 10 } 11 12 } 13 14 class Host{ 15 16 public void feed(Pet pet) { 17 pet.eat(); 18 } 19 } 20 21 class Pet{ 22 23 public void eat() { 24 25 } 26 } 27 28 class Dog extends Pet{ 29 30 // 方法的继承与覆盖 31 // 方法覆盖: 修饰符不大于,返回值不变,方法名不变,形参不变 32 public void eat() { 33 System.out.println("狗吃骨头"); 34 } 35 } 36 37 class Cat extends Pet{ 38 39 // 方法的继承与覆盖 40 public void eat() { 41 System.out.println("猫吃鱼"); 42 } 43 }
多态的作用就是减少类与类之间的相关联,在类与类的继承过程中,提供一个抽象类,并将子类将抽象类作为父类 ,使它成为一个与原父类的接口, 达到剥离原父类的目的;在原父类在调用子类时,可以通过接口进行去调用,并可以达到子类与原父类不相关的目的,提高扩展性。