Java面向对象:多态

目录


多态:

 * 同类型的对象,执行同一个动作,输出不同的行为

//父类,子类共同存在的行为

abstract class Animal{

    public String name="动物类";

    public abstract void run();

}

//子类1

class Dog extends Animal{

    public String name ="dog";

    //重写run()

    public void run(){

        System.out.println("dog run");

    }

}

//子类2,改写父类的方法为自己所用

class Cat extends Animal{

    public String name="cat";

    //重写run()

    public void run(){

        System.out.println("cat run");

    }

    //自己的miao ()

    public void maio(){

        System.out.println("cat 叫");

    }

}

主函数

public class Main {

    public static void main(String[] args) {

        /**

* 多态的常见形式:

* 父类类型 对象名称=new 子类构造器;

* 接口 对象名称=new 实现类构造器;

         */

        Animal d=new Dog();//构造动物类型的子类1

        Animal c=new Cat();

        /**

* 多态中成员访问的特点:

* 方法调用:

  •  编译看左边(父类),运行看右边(子类)

  • 多态下不能使用子类独有的功能

        */

        d.run();//运行子类1.run()

        c.run();//运行子类2.run()

        c.maio();//编译错误

//变量调用

  • 编译看左边,运行也看左边

        System.out.println(d.name);//调用:子类1.name 输出:动物类

        System.out.println(c.name);//调用:子类2.name 输出:动物类

// 多态下的类型转换

//自动类型转化

Animal a=new Dog();//就是多态的常见形式

//强制类型转换

//1.将父类(Animal)a 转换成子类(Dog)b,运行可能会出错

       

        Dog b=(Dog)a;

        System.out.println(b.name);//dog
  •   有继承或实现关系才可以这样强转
        Cat e=(Cat)b;

        / **子类强转子类报错:
        * Unresolved compilation problem:Cannot cast from Dog to Cat
        * /

        */

/**2.变量名 instanceof 真实类型

  • 判断instanceof左边变量的对象的真实类型,是否是右边的类型或者右边的子类类型

        */

        if(a instanceof Dog){

            Dog b=(Dog)a;

            System.out.println(b.name);

        }else if(a instanceof Cat){

            Cat e=(Cat)a;

            System.out.println(e.name);

        }

    }

    /**

* 多态的优势

  •  右边对象可以实现解耦合,便于扩展和维护
  • 便利性与扩展性:将父类作为定义方法时的参数,该方法可以接收这个父类所有的子类对象

     */

    public static void enter(Animal a){

        System.out.println("进入");

        a.run();

        System.out.println("结束");

    }

}


enter(d);//进入 dog run 结束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿崽meitoufa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值