java基础要点(8)面向对象-多态

 

/*
多态:可以理解为事物存在的多种形态

人:男人,女人
动物:猫,狗

猫   x=new 猫();
动物 x=new 猫();

1、多态的体现
 父类的引用指向了自己的子类对象
 父类的引用也可以接收自己的子类对象
2、多态的前提
 必须是类与类之间有关系,要么继承,要么实现
 通常还有一个前提:存在覆盖
3、多态的好处
 多态的出现大大的提高程序的扩展性
4、多态的弊端
 提高了扩展性,但是只能用父类的引用访问父类中的成员
5、多态的应用

6、多态的出现代码中的特点(多态使用的注意事项)

如何使用子类特有的方法:
*/
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 DuoTaiDemo
{
   public static void main(String[] args)
   {
     //  Animal a=new Cat();//类型提升  向上转型
     //  a.eat();
      //如果想要调用猫的特有方法时,如何操作?
    //强制将父类的引用专程子类类型
    //Cat c=(Cat)a;      向下转型
    //  Animal a1=new Dog();
    //  a1.eat();
     funtion(new Cat());
     funtion(new Dog());
  
  /*
  父亲 x=new 儿子();
  x.讲课();
  儿子  y=(儿子)y;
  y.看电影();

  多态自始至终都是子类对象在做着变化
  */

   }
   public static void funtion(Animal a)
   {
      a.eat();
      if (a instanceof Animal)
        //instanceof:用于判断对象的类型
        //对象 instanceof 类型(类类型  接口类型)
    {
      System.out.println("动物");
 
        if (a instanceof Cat)
        {

       Cat c=(Cat)a;
        c.catchMouse();
        }
        else if (a instanceof Dog)
        {
        Dog d=(Dog)a;
       d.kanJia();
       }

     }
  }

}

/*
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。
   如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。

总结:成员函数在多态调用时,编译看左边,运行看右边。


在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)


在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边。
*/

class Fu
{
   public static String name="fu";
   int sum=5;
   public static void method1()
   {
    System.out.println("Fu.......method1"+"  name....."+name);
   }
   public void method2()
   {
     System.out.println("Fu.......method2"+"   sum....."+sum);
  }
   public void method4()
   {
    System.out.println("Fu.......method4");
   }
}
class Zi extends Fu
{
   int sum=9;
   public static String name="zi";
   public static void method1()
   {
      System.out.println("Zi.......method1"+"name....."+name);
   }
   public void method2()
   {
      System.out.println("Zi.......method2"+"   sum....."+sum);
   }
   public static void method3()
   {
      System.out.println("Zi.......method3");
   }
 
}
class DuoTaiDemo1
{
   public static void main(String[] args)
   {
      Fu f=new Zi();
      f.method1();
      f.method2();
      f.method4();
      System.out.println(f.sum);
   }
}


/*
多态基于主板

需求:电脑运行与主板

*/
class MainBoard
{
   public void run()
   {
      System.out.println("MainBoard....run");
   }
   public void usePCI(PCI p)
   {
    p.open();
    p.close();
   }
}
interface PCI
{
   public abstract void open();
  public abstract void close();
}
class SoundCard implements PCI
{
   public void open()
   {
      System.out.println("soundcard open");
   }
   public void close()
   {
      System.out.println("soundcard close");
   }
}

class NetCard implements PCI
{
   public void open()
   {
      System.out.println("netcard open");
   }
   public void close()
   {
      System.out.println("netcard close");
   }
}
class DuoTaiDemo2
{
   public static void main(String[] args)
   {
      MainBoard mb=new MainBoard();
      mb.run();
      mb.usePCI(new SoundCard());
      mb.usePCI(new NetCard());
   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值