继承--多态

举报
brucexiaogui 发表于 2021/12/30 01:11:13 2021/12/30
1k+ 0 0
【摘要】 继承--多态 一、多态特征     1、编译时的类型由申明该变量时使用的类型决定,运行时的类型由实际赋给变量的对象类型决定。     2、如果编译类型和运行类型不同,就出现了多态。     3、多态例子:Person p = new Student(); 二、实现多态...

继承--多态

一、多态特征

    1、编译时的类型由申明该变量时使用的类型决定,运行时的类型由实际赋给变量的对象类型决定。

    2、如果编译类型和运行类型不同,就出现了多态。

    3、多态例子:Person p = new Student();

二、实现多态条件

    继承是多态实现的前提条件

    父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法

三、多态作用

    把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

四、引用类型转换

    向上转型(子类→父类):(自动完成)

父类名称 父类对象 = 子类实例 ;

    向下转型(父类→子类):(强制完成)

子类名称 子类对象 = (子类名称)父类实例 ;

五、注意事项

    1、在多态环境中,编译类型的变量不能调用实际类型的类里的方法,只能调用编译型的类里的方法。


      Car c = new  HM();//多态
      //c.hmXUANFU();//调用不到,c调用不到c实际类型里的方法
  
 

    2、在多态环境中,若调用的方法是子类覆写过来的,那么父类变量调用的时候,实际调用是子类覆写的方法。


      Car c = new  HM();//多态
     			/*
       若多态调用的方法是子类覆写过来的,
       那么父类变量调用的时候,实际上调用的是 子类的方法;
       */
      			c.show();//show到底是谁的?
  
 

六、多态实例


      class Car
      {
     	public void show()
      	{
      		System.out.println("我是一般的车");
      	}
      }
      class HM extends Car
      {
     	//覆写
     	public void show()
      	{
      		System.out.println("我是悍马车");
      	}
     	public void hmXUANFU()
      	{
      		System.out.println("我在炫富");
      	}
      }
      class Demo
      {
     	public static void main(String[] args)
      	{
     			Car c = new  HM();//多态
     			/*
       若多态调用的方法是子类覆写过来的,
       那么父类变量调用的时候,实际上调用的是 子类的方法;
       */
      			c.show();//show到底是谁的?
     			//c.hmXUANFU();//调用不到,c调用不到c实际类型里的方法
     			if(c instanceof HM)//检验是不是悍马
      			{
     						HM h =(HM)c;
      						h.hmXUANFU();
      			}
      	}
      }
  
 

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/79397104

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。