继承提高了程序的可维护性,多态提高了程序的可扩展性。


    **1.继承

    **
    继承可以实现代码的复用,子类可以继承父类的除私有属性和私有方法外的所有属性和方法。

    extends 可以表示继承关系

    Java中不允许多继承,即可以一个父类有多个子类,一个子类不能有多个父类
    Java接口可以多继承

    当父类的方法不能自满足子类的需求,就可以对该方法重写。重写时访问权限只能扩大,返回值类型不变。

    @Override:子类重写父类的标识。

    super 可用以指向父类的方法,如super.eat()

    在子类的默认无参构造方法中,有这样一个语法:

    1. public man(){
    2. //指向父类的无参构造方法
    3. super();
    4. }//这是默认的,不写出来也会有

    **2.多态

    概念:多种状态,同一对象在不同情况下表现出不同的状态或行为。

    必须有继承存在,才能有多态

    调用成员方法时,编译器看左边,运行器看右边

    调用成员变量时,编译看左,运行看右。

    父类成员方法可以重写,成员变量不可以。

    不能使用子类特有成员,需要使用子类特有成员,就需要转型。

    多态分为两个阶段:编译阶段和运行阶段

    (1)向上转型:把父类的引用指向子类的对象

    1. //如:父类有一个eat方法,想要调用子类中被重写后的eat方法。
    2. //用Animal类型(父类)来接收new出的对象(子类)。
    3. //在转型过程中,子类的新有的方法都会遗失掉。
    4. Animal animal = new Cat();

    (2)向下转型:把子类的引用指向父类的对象。

    1. //类似于C语言的类型强制转换,这里是把animal的引用强转为Cat类型
    2. //如:子类Cat定义了一个属于自己的方法,父类想要调用这个方法
    3. //则需要先向上转型:
    4. Animal animal = new Cat();
    5. Cat cat1 = (Cat)animal;
    6. //转型后,向上转型中遗失的子类的自有方法就可以使用了

    注意:向下转型是向上转型后才能执行的操作,否则不安全。

    多态的好处:
    提高了程序的可维护性(由继承保证)
    提高了程序的可扩展性(由多态保证)

    多态的弊端:
    不能访问子类的特有功能
    如何访问子类的特有功能:向下转型

    instanceof:x instanceof y,用来判断x是否是y的对象。

    tips:向下转型并不属于多态,它只是一种访问子类特有功能的手段。

    主人喂养宠物的案例:
    主人喂养多个宠物,如猫cat,狗dog,兔子等等
    所有宠物都有一个eat()方法,主人有feed方法,用一个test类进行喂养测试

    1. 一、采用对feed进行重载,每一个宠物对应一个feed方法,每增加一个宠物类就需要增加一个feed方法和一个对象。<br />但这样的程序耦合度高,可扩展性不强。

    二、给所有宠物建立一个共有父类pet,所有宠物都继承pet

    pet中定义一个eat()方法,然后给主人类定义一个feed方法,参数为(Pet pet),父类的引用指向子类的对象

    主人Master

    1. package com.jy.master;
    2. public class Master {
    3. public void feed(Pet pet){
    4. pet.eat();
    5. }
    6. }

    宠物猫Cat

    1. package com.jy.master;
    2. public class Cat extends Pet {
    3. public void eat(){
    4. System.out.println("猫吃鱼");
    5. }
    6. }

    宠物狗Dog

    1. package com.jy.master;
    2. public class Dog extends Pet {
    3. public void eat(){
    4. System.out.println("狗吃骨头");
    5. }
    6. }
    7. 宠物
    8. package com.jy.master;
    9. public class Pet {
    10. public void eat(){
    11. }
    12. }
    13. 场景,即喂养测试
    14. ```java
    15. package com.jy.master;
    16. import javafx.animation.ScaleTransition;
    17. public class MasterTest {
    18. public static void main(String[] args){
    19. Master master = new Master();
    20. Pet pet = new Pet();
    21. Cat cat = new Cat();
    22. Dog dog = new Dog();
    23. master.feed(cat);
    24. master.feed(dog);
    25. }
    26. }

    这种方法的好处:耦合度低,可扩展性强,增加一个宠物只需加一个类,不需要修改主人Master的代码。