14面向对象—多态

面向对象的第三大特征就是多态(Ploymorphism)

  1. 多态的实现条件
    Java实现多态的必要条件:继承、重写,当编译时类型和运行时类型不一致,就会出现多态。
    父类声明的变量可以引用所有子类的对象,这是多态实现的基础;我们只有在运行的时候才会知道引用变量所指向的具体实例对象。
  2. 多态的作用
    把不同的子类对象都当作父类对象;来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。简而言之,就是用父类或接口的引用变量指向子类的对象
  3. 应注意的问题
    (1)、静态方法不能被重写,所以静态方法没有多态性
    (2)、成员变量不具备多态性,成员变量的值取决于引用属性的类
    (3)、成员方法编译时应先检查引用变量所属类中是否有调用的方法;运行时调用的实际对象是所属类中的重写方法。
    (4)、一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中特有的属性和方法
  4. 案例
    动物类(父类)
public class Animal {
    public void shout(){
        System.out.println("动物在叫");
    }
    public void eat(String food){
        System.out.println("在吃"+food);
    }
}

猫类和狗类(子类)

//猫类
public class Cat extends Animal{
    @Override
    public void shout() {
        System.out.println("喵喵");
    }
}
//狗类
public class Dog extends Animal{
    @Override
    public void shout() {
        super.shout();
        System.out.println("汪汪汪");
    }
    @Override
    public void eat(String food) {
        System.out.println("小狗爱吃骨头,不爱吃"+food);
    }
}

测试类

public class Test {
    //多态的条件:继承和重写;适用于方法,不用于属性
    public static void main(String[] args) {
        //正常情况
        Animal animal = new Animal();
        animal.shout();
        Dog dog = new Dog();
        dog.shout();
        Cat cat = new Cat();
        cat.shout();

        //多态
        Animal a = new Dog();
        a.shout();  //此时调用的还是Animal里面默认的方法
        Dog d = (Dog) a;  //强制类型转换
        d.shout();  //此时就可以调用重写的shout方法了
        Animal an = new Cat();
        Cat c = (Cat)an;
        c.shout();
        //传入参数的多态
        test(animal);
        test(c);
        test(d);
    }
    public static void test(Animal animal){
        animal.shout();
    }
    public static Animal test1(Animal animal){
        //返回值的多态:可以返回d2,也可以返回c2
//        Dog d2=new Dog();
//        return d2;
        Cat c2 = new Cat();
        return c2;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值