第十八课:多态性

特点

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

// 素食
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);

    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,395评论 11 349
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,806评论 18 399
  • 有些路 要走了 才知道对不对 有些事要做了 才知道该不该放弃 重新选择
    一排森阅读 143评论 0 1
  • 天空中下着蒙蒙细雨,公交车上的人非常拥挤,这时,上来了一位中年残疾人,双手拄着拐杖扶着扶手一步一步挤过人群坐到车...
    奈斯丨阅读 79评论 0 0
  • 1. 培训班老师做久了,经常会遇到各种各样奇葩的家长。前不久我接了一个二年级的学生专门补“看图写话”。 小男孩叫壮...
    没无阅读 1,059评论 4 12