多态方法

       把子类对象赋值给父类的对象变量的情况称为向上转型,向上转型是自动进行的,无需开发人员干预。此时的父类对象变量只可以访问父类中声明的成员,子类所特有的部分被隐藏。

   如下an2.getEyesColor();这样写是会报出异常的,此时的父类变量an2不能访问子类Dog2中的方法。

 

       而多态方法是指:

       方法的多态是基于方法覆盖和动态绑定机制的。也就是在对象变量上调用覆盖方法,具体调用的是子类中的方法还是父类中的方法,由运行时绑定决定,不是由声明对象变量时的类型决定。如下示例代码,控制台输出结果为:

 

package _4_5.Override.多态;


public class MethodPolymorphismTest {
    public static void main(String[] args) {
        Animal2 an = new Animal2("啥动物");
        System.out.println(an.getBark());// 调用多态方法
        Animal2 an2 = new Dog2("小黑狗", "黑色");// 向上转型
        System.out.println(an2.getBark());// 调用多态方法
        Animal2 an3 = new Cat2("蓝猫", "蓝色");// 向上转型
        System.out.println(an3.getBark());// 调用多态方法
    }
    
    static class Animal2 {
        private String name;
        public Animal2(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
        public String getBark(){//获取动物的叫声
            return "叫声。。。。";
            
        }

    }
    static class Cat2 extends Animal2{//猫科类继承动物类
        private String eyesColor;

        public Cat2(String n, String c) {
            super(n);
            eyesColor = c;
        }

        public String getEyesColor() {
            return eyesColor;
        }
        public String getBark(){//获取猫的叫声
            return "喵喵喵";
            
        }
    }

    static class Dog2 extends Animal2 {
        private String furColor;

        public String getFurColor() {
            return furColor;
        }

        public Dog2(String n, String c) {
            super(n);
            furColor = c;
        }
        public String getBark(){//获取狗的叫声
            return "汪汪汪";
            
        }

    }
}
原文地址:https://www.cnblogs.com/huangahuo/p/8387086.html