当使用多态方式调用方法时,首先检查父类中是否有该方法,如果有,再去调用子类的同名方法;如果没有,,只能向下转型
import javax.print.attribute.standard.RequestingUserName;
import java.util.Scanner;
public class testfather {
public static void main(String[] args)
{
Animal a = new fish(); //父类对象被赋以子类类型
/*Animal a;
fish b = new fish b;
a= b; //向上转型,不丢失精度
a.talk();*/ //可达到相同效果
a.talk(); //fish覆写animal talk方法
Animal animal = new bird();
//animal .talk2(); //不能实现,因为animal中没有此方法,必须向下转型
bird b = (bird)c; //如果不进行转换,父类无法看到子类新扩充的方法
b.talk2();
}
}
class Animal
{
public void talk() //如果父类方法不想被覆写,可改为public static void talk()
{
System.out.println("walk");
}
}
class fish extends Animal
{
public void talk()
{
System.out.println("swim");
}
}
class bird extends Animal
{
public void talk()
{
System.out.println("fly");
}
public void talk2()
{
System.out.println("i am a bird");
}
}