java 多态

package com.mydemo.controller;
/**
 * 多态
 * java 多态有三个条件:
 * 1、继承(继承普通类、继承抽象类、实现接口) 
 * 2、重写 
 * 3、父类引用指向子类对象
 * -------------------------------------
 * java 父类引用不能访问子类成员变量、子类方法
 * 需要强转
 * 在强转前还要 instanceof, 不instanceof 也可以,但为了程序的健壮性,建议instanceof 
 * -------------------------------------
 * 调用子类重写的方法因为有多态,就不需要强转了
 */
public class TestAnimal {
    public static void main(String[] args) {
        Animal dog = new Dog("大黄", "黄");
        dog.enjoy();
        /* 下面一行实际上并没有强转,dog还是一只Animal,
         * 因为dog 引用在声明时是Animal
         */
        dog = (Dog)dog;
//        System.out.println(dog.furColor);
        Dog bigYellow = (Dog)dog;
        System.out.println(bigYellow.furColor);
    }
}

class Animal {
    public String name;
    public Animal(String name) {
        this.name = name;
    }
    public void enjoy() {
        System.out.println("叫……");
    }
}

class Dog extends Animal {
    public String furColor;
    public Dog(String name, String furColor) {
        super(name);
        this.furColor = furColor;
    }
    public void enjoy() {
        System.out.println("狗叫……");
    }
}

原文地址:https://www.cnblogs.com/Mike_Chang/p/7073272.html