多態轉型學習筆記DuoTaiDemo1.java

 

/*
多態:可以理解爲事物存在的多種體現形態

人:男人,女人

動物:貓,狗

貓 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();
  }
 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章