Java中的多态

多态

多态的转型

abstract class Ainimal

{

    public abstract void eat();//抽象

}

class Cat extends Ainimal

{

    public void eat()

    {

       System.out.println("吃鱼");

    }

    public void CatMouse()

    {

       System.out.println("抓老鼠");

    }

}

class Dog extends Ainimal

{

    public void eat()

    {

       System.out.println("吃骨头");

    }

    public void kanJia()

    {

       System.out.println("看家本领");

    }

}

class PPig extends Ainimal

{

    public void eat()

    {

       System.out.println("饲料");

    }

    public void GongDi()

    {

       System.out.println("拱地");

    }

}

public class _02多态_转型 {

   

    public static void main(String[]args)

    {

       Ainimala = new Cat();  //类型的提升,向上转型      'a'-->表示父类的引用。

       a.eat();

      

       //如果想要调用猫的特有方法时,如何操作?

       //强制将父类的引用。转成子类类型。

       //向下转型。

       Cat c = (Cat)a;//将动物的变量名转成Cat类型

       c.CatMouse();

      

       //千万不要出现这样的操作,就是将父类对象转换成子类类型。

       //我们能转换的是父类引用指向了子类的对象时,该引用可以被提升,也可以被转换

      

 //规律:多态自始至终,都是子类对象在做着变化。

       //Ainimal a = new Ainimal();

       //Cat c = (Cat)a;

      

       /* 毕姥爷的功能:讲课(工商管理)

        * 毕老师的功能:讲课(Java),看电影

        *

        * 毕姥爷 x = new 毕老师();    

        * x.讲课();

        *

        * 毕老师  y = (毕老师)x;

        * y.看电影();

        */

      

       function(new Cat());  //传值

    }

   

    //-------提高代码的扩展性-----------

    public static void function(Ainimal a)   //Ainimal a = new Cat();

    {

       //a.eat();

       //a.catMouse();//这块是不允许的,因为它不在父类中存在,不是所有动物都具备的功能

      

       if(a instanceof Cat)

       {

           Cat c = (Cat)a;

           c.eat();

           c.CatMouse();

       }

       else if(a instanceof Dog)

       {

           Dog d = (Dog)a;

           d.eat();

           d.kanJia();

       } else if(a instanceof PPig)

       {

           PPig p = (PPig)a;

           p.eat();

           p.GongDi();

       }

    }

}

多态的使用注意事项

多态中成员的特点

class DFu

{

    int num =5;

    void methed1()

    {

       System.out.println("Fumethed_1");

    }

    void methed2()

    {

       System.out.println("Fumethed_2");

    }

    static void methed4()

    {

       System.out.println("父类:静态所修饰的函数,调用时看左边的引用对象");

    }

}

class DZi extends DFu

{

    int num = 8;

    void methed1()

    {

       System.out.println("Zimethed_1");

    }

    void methed3()

    {

       System.out.println("Zimethed_3");

    }

    static void methed4()

    {

       System.out.println("子类:静态所修饰的函数,调用时看左边的引用对象");

    }

}

public class _04多态中成员的特点 {

   

    public static void main(String[]args)

    {

       DFu f = new DZi();

       f.methed1();

       f.methed2();

       //f.methed3();   //失败,因为父类中几有这个函数

      

       System.out.println(f.num);

      

       /*

        * 多态中成员函数的特点:

        * 在编译时,参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败

        * 在运行时,参阅对象所属的类中,是否有调用的方法。

        * 简单总结就是:所员函数在多态调用时,编译(看左边)运行(看右边)

        */

       f.methed4();

      

       DZi z = new DZi();

       z.methed1();

       z.methed2();

       z.methed3();

      

       System.out.println(z.num);

           面试题注意

       /*

        * 多态中,成员变量的特点:int num;

        * System.out.println(f.num);

        *System.out.println(z.num);

        * 无论编译和运行,都参考左边(引用型变量所属的类)

        */

      

       z.methed4();

       /*

        * 多态中,静态成员函数的特点:

        * 无论编译和运行,都参考左边(引用型变量所属的类)

        */

    }

 

}

 

多态主板示例

//需求:插入主板电脑运行

class MainCar

{

    public void rum()

    {

       System.out.println("主板运行");

    }

    //调用各插卡的功能

    public void usePCI(PCI p)//PCIp=new PCI();接口型引用,指用自己的子类对象。

    {

       if(p!=null)

       {

           p.Open();

           p.Close();

       }

    }

}

//接口

abstract interface PCI

{

    public abstract void Open();

    public abstract void Close();

}

//网卡

class NetCar implements PCI

{

    public void Open()

    {

       System.out.println("可以上网了");

    }

    public void Close()

    {

       System.out.println("关闭上网功能");

    }

}

//声卡

class SoundCar implements PCI

{

    public void Open()

    {

       System.out.println("声音:开");

    }

    public void Close()

    {

       System.out.println("声音:关");

    }

}

 

public class _05多态的主板示例 {

   

    public static void main(String[]args)

    {

       MainCar m = new MainCar();

       m.rum();//运行主板

      

       m.usePCI(null);//接口不能为空

       m.usePCI(new NetCar());//插上网卡

       m.usePCI(new SoundCar());//插上声卡

    }

 

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值