java多态性

面向对象的特征之三:多态性

对象的多态性:父类的引用指向子类的对象

父类名 对象名=new 子类名();

多态的使用:当通过多态性创建的对象调用子类与父类同名同形参的方法时,实际执行的是子类重写父类的方法--------虚拟方法调用

多态性的使用前提:1、类的继承关系

                                2、方法的重写(经常在方法重写情况下用多态性)

对象的多态性只适用于方法不适用于属性(属性是谁的对象调用的就是谁的属性)

多态是运行时行为

public class duotai {
    public static void main(String[] args) {
        duotai c=new duotai();
        c.fun(new dog());
c.fun(new cat());
    }
public void fun(Animal animal){
    animal.eat();
    animal.shout();

    }
}
 class Animal{
public void eat(){
    System.out.println("动物叫");

}
public void shout (){
    System.out.println("动物吃东西");
}
}
    class dog extends Animal{
    public void  eat(){
        System.out.println("汪汪汪");
    }
    public void shout(){
        System.out.println("啃骨头");

    }

} class cat extends Animal{
    public void eat(){
        System.out.println("喵喵喵");
    }
    public void shout(){
        System.out.println("吃鱼");
    }
}

结果

汪汪汪
啃骨头
喵喵喵
吃鱼

多态性创建对象时是父类的引用指向子类

父类名 对象名=new 子类名();

编译看左边,实际看右边

由于是父类的对象进行调用,所以只能调用父类里面的方法和属性,如果子类的方法是重写方法则调用子类的方法。

如果是子类特有的方法,由于父类没有,从编译上看只能调用父类有的属性和方法,因此无法调用子类特有的方法和属性

如果要调用子类特有的属性和方法需要

对象名 instanceof 类名:判断这个对象是不是这个类的实例,如果是返回true,如果不是返回false

向下转型,使用强制类型转换符(子类转换为父类自由转换,而父类转化为子类需要强制转换)

使用强转时可能会出现ClassCastException的异常

为了避免ClassCastException的异常在向下转型之前,先进行instanceof的判断,如果返回的时true则进行向下转型。如果返回false,就不进行向下转型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值