加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java之多态

发布时间:2020-12-15 06:44:34 所属栏目:Java 来源:网络整理
导读:多态性: 是面向对象中最重要的概念,在java中有两种体现: 方法的重载和重写; 对象的多态性--可以直接应用到抽象类和接口上; 成员变量调用: Java的引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量使使用的类型决定,运行时类型由实

多态性:是面向对象中最重要的概念,在java中有两种体现:

  • 方法的重载和重写;
  • 对象的多态性--可以直接应用到抽象类和接口上;

成员变量调用:

Java的引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量使使用的类型决定,运行时类型由实际赋给该变量的对象决定。若编译时类型和运行时不一致,就会出现多态。?

对象的多态性,在Java中,子类对象可以替代父类的对象引用:

  • 一个变量只能有一种确定的数据类型;
  • 一个引用类型变量可能指向(引用)多种不同类型的对象;
  • Perosn p = new Person();
    Person e = new Student();

子类可以看作是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型。

一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法:

Student m = new Student();

m.school = ?"pku';//合法,Student类有school成员变量

Person e = new Student();

e.school = "pku";//不合法,Perosn类没有school成员变量

属性是在编译时确定的,编译时e为Person属性,没有school成员变量,因此编译错误。

虚拟方法调用:

正常的方法调用:

  • Person p = new Person();
  • p.getInfo();
  • Student s = new Student();
  • s.getInfo();

虚拟方法调用,多态情况下:

  • Perosn e = new Student();
  • e.getInfo();//调用Student类的getInfo方法

编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的getInfo()方法--动态绑定。

总结:

前提:

  • 需要存在继承或者实现关系;
  • 需要有覆盖操作;

成员方法:

  • 编译时:查看引用变量所属的类中是否有所调用的方法;
  • 运行时:调用实际对象所属的类中重写的方法;

成员变量:

  • 不具备多态性,只看引用变量所属的类。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读