文章目录

  • 方法覆盖
  • 常见笔试题

多态是面向对象程序设计中代码重用的一个重要机制,它表示当同一个操作在不同对象时,会有不同的语义,从而会产生不同的结果,例如:同样是执行“+”操作,“3+4”用来实现正数相加,而“3”+“4”却实现了字符串的连接。在java语言中,多态主要有以下两种表现方式:
1)方法的重载。重载是指同一个类中有多个同名的方法,但这些方法有着不同的参数,因此在编译时就可以确定到底调用哪个方法,它是一种编译时多态。重载可以被看作一个类中的方法多态性。
2)方法的覆盖。子类可以覆盖父类的方法,因此同样的方法会在父类与子类中有着不同的表现形式。在java语言中,基类的引用变量不仅可以指向基类的实例对象,也可以指向其子类的实例对象。同样,接口的引用变量也可以指向其实现的实例对象。而程序调用的运行方法在运行期间才动态绑定(绑定指的是将一个方法调用和一个方法主体连接到一起),就是引用变量所指向的具体实例对象的方法。通过这种动态绑定的方法实现了多态。由于只有在运行时才能确定调用哪个方法,因此通过方法覆盖实现的多态也可以被称为运行时多态,示范如下:

方法覆盖

class Base{public Base(){g();}public void f(){System.out.println("Base f()");}public void g(){System.out.println("Base g()");}}
class Derived extends Base{public void f(){System.out.println("Derived f()");}public void g(){System.out.println("Derived g()");}
}
public class Test {public static void main(String[] args) {Base b=new Derived();b.f();b.g();}
}

程序运行结果为:

Derived g()
Derived f()
Derived g()

上例中,由于子类Derived的f()方法和g()方法与父类Base的方法同名,因此Derivered的方法覆盖Base的方法。在执行Base b=new Deriver()语句时,会调用Base类的构造函数,而在Base的构造函数中,执行了g()方法,由于Java语言的多态特性,此时会调用子类Derived的g()方法,而非父类Base的g()方法,因此会输出Deriver g()。由于实际上创建的是Deriver类的对象,后面的方法调用都会调用子类的Deriver的方法。
此外,只有类中的方法才有多态的概念,类中成员变量没有多态的概念,示例如下:

class Base1{public int i=1;
}
class Deriver1 extends Base1{public int i=2;}
public class Test1 {public static void main(String[] args) {Base1 b = new Deriver1();System.out.println(b.i);}
}

我们的运行结果是

1

由此可见,成员变量是无法实现多态的,成员变量的值取父类还是子类并不取决于创建对象的类型,而是取决于所定义变量的类型,这是在编译期间确定的。
在上述例子中,由于b所属的类型是Base,b.i指的是Base类中定义的i;因此程序输出结果为1.

常见笔试题

java中提供了哪两种用于多态的机制?
答案:编译时多态和运行时多态。编译时多态是通过方法重载实现的,运行时多态是通过方法的覆盖(子类覆盖父类方法)实现的。

多态的实现机制是什么?相关推荐

  1. 类对接口的实现不叫继承_Java多态的实现机制是什么,看完你就知道(值得收藏)...

    Java多态的实现机制是父类或接口定义的引用变量可以指向子类或实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实现对象的方法,也就是内存里正在运行的那个对象的方法,而不是 ...

  2. java多态的实现_Java多态的实现机制是什么,写得非常好!

    作者:crane_practice www.cnblogs.com/crane-practice/p/3671074.html 2019-06-13 08:46:00 Java多态的实现机制是父类或接 ...

  3. Java 多态的实现机制

    一.定义 多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底 ...

  4. 【Java】什么是多态?多态的实现机制是什么?

    官方解释: 1.接口的多种不同的实现方式即为多态. 2.多态性是允许你将父类对象设置成为一个或更多的他的子对象相等的技术. 3.我们在程序中定义的引用变量所指向的具体类型和通过改引用变量的方法调用在编 ...

  5. 什么是多态,JAVA 中多态的实现机制

    什么是多态,JAVA 中多态的实现机制 首先声明啊,这里的多态不是生物学和物理学上的多态性,这个是指编程语言中的多态. 官方说明: 多态(英语:polymorphism)指为不同数据类型的实体提供统一 ...

  6. C++多态的实现机制

    1.静态联编与动态联编 联编:是指一个程序模块.代码之间相互关联的过程   静态联编(static binding):是程序的匹配.连接在编译阶段实现,重载函数使用静态联编  动态联编:是指程序联编推 ...

  7. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  8. java的多态和动态绑定机制

    什么是多态,多态具体体现在哪些方面? 多态:方法或者对象具有多挣形态,是OOP的第三大特征,是建立在封装和继承期初之上的多态具体表现, 1.方法多态 (1)重载体现多态, (2)重写体现多态 2.对象 ...

  9. JAVA多态的动态绑定机制

    对于多态,大家基本上都很熟悉,日常开发用的也挺多,一句话概括:父类引用指向子类对象 在集合的使用上,List mList = new ArrayList<>(); 在类的继承时,Anim ...

最新文章

  1. iOS 5中的strong和weak关键字
  2. c++11新特性_c++11新特性(四)
  3. tomcat 设置java内存_Tomcat 设置JVM内存大小
  4. linux fall delay 10,Cell的Rise delay和Fall delay、Rise transition和fall transition
  5. 标识符的命名规定java 0126
  6. 2019西北工业大学程序设计创新实践基地春季选拔赛(重现赛)
  7. 微软.NET程序员必上的网站
  8. day1--numpy
  9. WinForm开发之点滴整理
  10. 编译静态expect现undefined reference to `openpty' 错误解决方法
  11. qqxml代码-班级作业xml卡片代码班级作业
  12. 搜集百度关键词的相关网站、生成词云
  13. 玩觅伊的女孩,都是一些什么样的人?
  14. 视频截取程序matlab,通过matlab截取视频
  15. c语言 fflush stdin,C语言函数:fflush(stdin)
  16. JQuery Ajax使用FormData对象上传文件 图片
  17. 小米路由开启SSH访问权限
  18. 最近爆火的电子血氧仪是什么原理?测的准吗?
  19. Python求各科成绩差与平均数
  20. Jemeter 设置中文

热门文章

  1. oracle 数据类型是什么,oracle的数据类型有哪些?
  2. 使用docker在Centos上做DNS服务器的配置
  3. hadoop的小疑问:Map执行未结束便开始执行Reduce操作?
  4. 什么是Watchdog?
  5. [机器学习-5]岭回归及python实现(Ridge Regression)
  6. 在markdown下用mma画函数图像
  7. hello.c的一生
  8. 2021春深入理解计算机系统大作业——程序人生
  9. 笨办法学Python 25
  10. c#获取公网的ip,本机ip 以及当前城市以及运营商