欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第十八课:多态性

程序员文章站 2022-07-14 19:00:34
...

特点

  • 对象的多态性: 分家导致的财产纠纷
  • 方法 的多态性:双重事件

// 素食
interface Vegetarian{

}

class Bird{

}

class Animal{

    public void run(){

        System.out.println("Animal----Run is nature");
    }

    public void eat(){

        System.out.println("Animal----eat is nature");
    }
        public void eat(String str){

        System.out.println("Animal----eat is nature");
    }
    // public String toString(){

    //  return "fds";
    // }
}

public class Deer extends Animal implements Vegetarian{

    String name;
    public void run(){

        System.out.println("Deer----Run is nature");
    }

    public void sleep(){

        System.out.println("Deer----sleep is nature");
    }

    public String toString(){

        return  name + " is a deer";
    }
    public static void main(String[] args) {

        /*
        向上转(类)型
        多态性是指对象能够有多种形态。(主要体现在 1.方法的重载和重写 2. 对象的多态性)
        在 OOP 中最常用的多态性发生在当父类引用指向孩子类对象时。
        */
        Deer d = new Deer();
        //父类引用指向孩子类对象
        Animal a = d;
        a.run();// Deer----Run is nature
        Vegetarian v = d;
        Object o = d;

        /*
            现在 Deer 类是多态的,因为他有多个继承机制。针对上面的例子有以下说法:

            Deer 就是 Animal
            Deer 就是 Vegetarian
            Deer 就是 Deer
            Deer 就是 Object
        */
        // 所有的引用变量 d, a, v, o 引用同一个对象 Deer。
        System.out.println(d instanceof Deer);
        System.out.println(a instanceof Deer);
        System.out.println(v instanceof Deer);
        System.out.println(o instanceof Deer);

        /*
        对象的多态性
        向上转(类)型:程序会自动完成
        父类 父类对象 = 子类实例  (该父类对象只能调用父子交集的部分)
        */
        Animal animal = new Deer();
        animal.run(); // 方法重写
        animal.eat();
        // animal.sleep();// 不能被调用
        System.out.println("-----------------------");

        

        // 向下转型: 强制类型转换(一定先发生向上转型 才能发生向下转型)
        // 子类 子类对象 = (子类)父类实例
        // Animal ani = new Animal();  //ClassCastException 类型转换异常
        Animal ani = new Deer();  
        Deer deer = (Deer)ani;
        deer.run();
        deer.eat();// 父类自己方法
        deer.sleep(); // 子类自己的方法
        deer.name = "dr";
        System.out.println(deer);

    }
}