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("狗叫……");
}
}
![]()