/*
多態:可以理解爲事物存在的多種體現形態
人:男人,女人
動物:貓,狗
貓 x=new 貓();
動物 x=new 貓();
1.多態的體現
父類的引用指向了自己的子類對象
父類的引用也可以接收自己的子類對象
2.多態的前提
必須是類與類之間有關係,要麼繼承,要麼實現
通常還有一個前提:存在覆蓋
3.多態的好處
多態的出現大大的提高程序的擴展性
4.多態的弊端:
提高了擴展性,但是隻能使用父類的引用訪問父類中的成員
5.多態的應用
第二個問題:如何使用子類特有方法。
*/
/*
動物
貓,狗
*/
abstract class Animal
{
public abstract void eat();
}
class Cat extends Animal
{
public void eat()
{
System.out.println("吃魚");
}
public void catchMouse()
{
System.out.println("抓老鼠");
}
}
class Dog extends Animal
{
public void eat()
{
System.out.println("吃骨頭");
}
public void kanJia()
{
System.out.println("看家");
}
}
class Pig extends Animal
{
public void eat()
{
System.out.println("飼料");
}
public void gongDi()
{
System.out.println("拱地");
}
}
//----------------------------------------------
class DuoTaiDemo1
{
public static void main(String[] args)
{
//Animal a=new Cat();//類型轉換,向上轉型 byte b=2;int x=b;
//a.eat();
//如果逍遙調用貓的特有方法時,如何操作?
//強制將父類的引用。轉化子類類型。向下轉型
//Cat c=(Cat)a;
//c.catchMouse();
//千萬不要出現這樣的操作,就是將父類對象轉成子類類型如下。
//Animal a=new Animal();
//Cat c=(Cat)a;
//我們能轉換的是父類的引用指向了自己的子類對象時,該引用可以被提升,也可以被強制轉換
//多態自始至終都是子類對象在做着變化
/*
畢老爺 x=new 畢老師();
x.講課();
畢老師 y=(畢老師)x;
y.看電影();
*/
function(new Cat());
}
public static void function(Animal a)//Animai a=new Cat();
{
a.eat();
/*if(a instanceof Animal)
{
System.out.println("haha");
}
else
*/
if(a instanceof Cat)
{
Cat c=(Cat)a;
c.catchMouse();
}
else if (a instanceof Dog)
{
Dog c=(Dog)a;
c.kanJia();
}
}
}