Java多态

java 中要实现多态,必须要满足如下几个条件,缺一不可:
1. 必须在继承体系下
2. 子类必须要对父类中方法进行重写
3. 通过父类的引用调用重写的方法
多态体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法。

一,重写 (override) :也称为覆盖。重写是子类对父类非静态、非 private 修饰,非 fifinal 修饰,非构造方法等的实现过程
进行重新编写 , 返回值和形参都不能改变 即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定
于自己的行为。 也就是说子类能够根据需要实现父类的方法。

下面代码我们对子类的Dog和Cat分别对父类Animal的sleep函数进行了重写

class Animal{
    public void sleep(){
        System.out.println("在睡觉");
    }
    public void eat(){
        System.out.println("干饭");
    }
}

class Dog extends Animal{
    String name = "wangcai";
    @Override
    public void sleep(){
        System.out.println(name + "在睡觉");
    }
    public void huhu(){
        System.out.println(name + "打呼噜");
    }
}

class Cat extends Animal{
    String name = "xiaomi";
    @Override
    public void sleep(){
        System.out.println( name + "在睡觉");
    }
    public void huha(){
        System.out.println(name + "也打呼噜");
    }
}

public class Test {
    public static void main(String[] args) {
        //向上转型
        Animal dog = new Dog();
        Animal cat = new Cat();
        dog.sleep();
        cat.sleep();
        System.out.println("======================");
        //向下转型
        if (dog instanceof Dog){
            Dog s1 = (Dog)dog;
            s1.huhu();
            s1.eat();
        }
        else if (dog instanceof Cat){
            Cat s2 = (Cat)dog;
            s2.huha();
        }
    }
}
结果:
wangcai在睡觉
xiaomi在睡觉
======================
wangcai打呼噜
干饭

二,向上转型:向上转型:实际就是创建一个子类对象,将其当成父类对象来使用。

但是当发生向上转移的时候,此时通过父类的引用只能访问父类的方法,不能访问子类特有的成员。例如此时dog不能访问Dog类特有的huhu()方法。

三, 向下转型:

将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的方法,但有时候可能需要调用子类特有的方法,此时:将父类引用再还原为子类对象即可,即向下转换。
向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常。 Java 中为了提高向下转型的安全性,引入了 instanceof ,如果该表达式为 true ,则可以安全转换。

 

四,多态的使用:

只需要创造一个新类就能使用方法func来分别调用sleep方法。

public class Test {

    public static void func(Animal anm) {
        anm.sleep();
    }

    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();
        func(dog);
        func(cat);
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值