Java基础十六(多态、向上转型、向下转型)

多态

多态的前提就是继承,多态的字面意思是同一个事物在不同的场合具有不同的形态。

多态:父类的引用或者接口的引用指向了自己的子类对象。

//父类的引用指向一个子类的对象
Fu f=new Zi();

例子:

abstract class Animal
{
        //由于每一个小动物的eat方式都不一样,因此只能使用抽象方法描述,从而导致这个类也为抽象类
        abstract public void eat();
}
class Dog extends Animal
{
        public void eat()
        {
                System.out.println("啃骨头");
        }
        public void lookHome()
        {
                System.out.println("看家");
        }
}
 Dog d = new Dog();
 Animal a = new Dog();

首先主函数中这么写的前提是Dog类 继承自Animal 类。父类Animal只写了一个抽象函数eat,Dog子类重写了eat函数,并有一个自己的特有功能函数lookHome。第一句Dog对象的类型是Dog类型,对于b这个对象,它可以调用Dog类中的函数。第二句Dog对象的类型右边是Dog类型,左边Animal类型,即父类Animal 的引用指向了它的子类Dog的对象,是多态的体现,对象a不能调用Dog类的特有功能lookHome。

多态的好处和弊端

  • 好处:提高了程序的扩展性
  • 弊端:通过父类引用操作子类对象时,只能使用父类中已有的方法,不能操作子类特有的方法

当父类的引用指向子类对象时,就发生了向上转型,即把子类类型对象转成了父类类型。向上转型的好处是隐藏了子类类型,提高了代码的扩展性。但向上转型也有弊端,只能使用父类共性的内容,而无法使用子类特有功能,功能有限制。

什么时候使用向上转型

  • 当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作,这时就可以使用向上转型。

什么时候使用向下转型

  • 当要使用子类特有功能时,就需要使用向下转型。
  • 向下转型的好处:可以使用子类特有功能。
  • 弊端是:需要面对具体的子类对象;在向下转型时容易发生
    ClassCastException类型转换异常。在转换之前必须做类型判断

总结:转型过程中,至始至终只有子类对象做着类型转换,父类对象是无法转成子类对象的。


多态中成员的特点

多态成员变量
当子父类中出现同名的成员变量时,多态调用该变量时:

  • 编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,编译失败。
  • 运行时期:也是调用引用型变量所属的类中的成员变量。
  • 简单记:编译和运行都参考等号的左边。编译运行看左边。

多态成员函数

扫描二维码关注公众号,回复: 8930164 查看本文章
  • 编译时期:参考引用变量所属的类,如果没有类中没有调用的函数,编译失败。
  • 运行时期:参考引用变量所指的对象所属的类,并运行对象所属类中的成员函数。
  • 简而言之:编译看左边,运行看右边。

多态静态函数

  • 多态调用时:编译和运行都参考引用类型变量所属的类中的静态函数。
  • 简而言之:编译和运行看等号的左边。其实真正调用静态方法是不需要对象的,静态方 法通过类直接调用。

总结:
1. 对于成员变量和静态函数,编译和运行都看左边。
2. 对于成员函数,编译看左边,运行看右边。

发布了70 篇原创文章 · 获赞 56 · 访问量 1994

猜你喜欢

转载自blog.csdn.net/qq_43624033/article/details/103477727