/*
多态情况下,不能访问子类特有的成员。
多态情况下如果需要调用到子类特有的成员,那么需要进行强制类型转换。
基本数据类型:
小数据类型----->大数据类型 自动类型转换
大数据类型----->小数据类型 强制类型转换。
引用数据类型转换:
小数据类型----->大数据类型 自动类型转换
大数据类型----->小数据类型 强制类型转换
*/
abstract class Animal{
String name;
String color;
public Animal(String name,String color){
this.name = name;
this.color = color;
}
public abstract void run();
}
//鱼
class Fish extends Animal{
public Fish(String name,String color){
super(name,color);
}
public void run(){
System.out.println(name+"摇尾巴游啊游啊..");
}
//特有的方法
public void bubble(){
System.out.println(name+"在吹泡泡..");
}
}
class Mouse extends Animal{
public Mouse(String name,String color){
super(name,color);
}
public void run(){
System.out.println(name+"四条腿大摇大摆的走!!");
}
//特有的方法
public void dig(){
System.out.println(name+"在挖洞...");
}
}
class Demo5
{
public static void main(String[] args)
{
//System.out.println("Hello World!");
/*
Animal a = new Fish("锦鲤","白色"); //自动类型转换
Fish f = (Fish)a; //强制类型转换 相当于把动物看成了鱼
f.bubble();
*/
Fish f = new Fish("锦鲤","白色");
Mouse m = new Mouse("竹鼠","棕色");
print(m);
}
//需求: 定义一个方法可以接受任何类型的动物对象,在方法内部调用动物对象特有的方法。
public static void print(Animal a){
if(a instanceof Fish){
Fish f= (Fish)a;
f.bubble();
}else if(a instanceof Mouse){
Mouse m = (Mouse)a;
m.dig();
}
}
// .ClassCastException 强制类型转换异常。 引用类型变量做强制类型转换之前一般都会使用instanceof关键字先判断
}