美文网首页学习随记
JAVA学习之多态篇(五)

JAVA学习之多态篇(五)

作者: 南三号 | 来源:发表于2017-08-27 16:31 被阅读13次

    多态=对象的多种形态

    继承是多态的实现基础

    一. 引用的多态

    • 父类的引用可以指向本类的对象
    Animal obj1=new Animal();
    
    • 父类的引用可以指向子类的对象
    //Dog类是Animal的子类
    Animal obj2=new Dog();
    //相当于你是一条狗,而你对外声明你是一个动物,而系统觉得你是一个动物,他就不会让你调用狗的方法
    //obj2是一个Dog类型的,可以调用与父类共有的属性和方法,但不能调用Dog类相对于父类【特有】的方法。
    

    二. 方法的多态

    即子类不满意父类的某个方法进行重写

    //Animal中eat()方法
    public void eat(){
        system.out.println("动物可以吃东西");
    }
    //Dog中eat()方法
    public void eat(){
        system.out.println("狗喜欢骨头");
    }
    //定义两个对象
    Animal obj1=new Animal();
    Dog obj2=new Dog();
    obj1.eat();//输出“动物可以吃东西”
    obj2.eat();//输出“狗喜欢骨头”
    

    三. 多态中的引用类型转换

    • 向上类型转换(隐式自动转换)(小类型到大类型)(无风险)
    • 向下类型转换(强制类型转换)(大类型到小类型)(有风险)
    Dog dog=new Dog();
    Animal animal=dog;//进行了向上转换
    Dog dog2=(Dog)animal;//进行了向下类型强制转换,而直接Dog dog2=animal会报错。
    //一二两句等价于:
    Animal animal=new Dog();
    
    • instanceof方法(用来避免强制转换出现的问题)
    //instanceof返回一个布尔值,使用方法:
    <实例对象名> instanceof <类名>;
    //意思:animal是不是Dog类型,是则返回true,否则返回false。
    animal instanceof Dog;
    

    四. 抽象类

    abstract关键字
    抽象类关注子类具有的特征,但不注重子类如何去实现。

    应用场景

    • 在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。
    • 从多个具有相同特征的类中抽象出一个抽象类作为这些类的父类(即模板),从而避免子类设计的随意性。

    注意:

    • abstract可以定义抽象类也可以定义抽象的方法
    • 包含抽象方法的类必须是抽象类
    • 抽象类可以包含普通方法,也可以没有抽象方法
    • 抽象类不能直接创建(实例化),但可以定义引用变量。即引用的多态<父类的引用可以指向子类的对象>

    使用方法:

    public abstract class Animal(){
        abstract void eat();
    }
    

    相关文章

      网友评论

        本文标题:JAVA学习之多态篇(五)

        本文链接:https://www.haomeiwen.com/subject/roobdxtx.html