java-面向对象的多态性摘要

  多态的作用就是用来将接口和实现分离开,改善代码组织结构,增强代码可读性,便于代码的维护。

  在java中,讨论多态就是讨论方法调用的绑定,绑定就是将一个方法调用同一个方法主体联系起来。在java中通常叫做“运行时绑定”,也称“后期绑定”。例如:

1.定义一个基类

public class Parents{

  public void print(){

    System.out.println("parents");

  }

}

2.定义两个派生类

public class Mother extends Parents{
  @Override
  public void print(){
    System.out.println("Mother");
  }
  //无法重写父类被static或final修饰的方法
  //这里相当于创建了一个全新的tell()方法
  public static void tell(){
    System.out.println("static for mother");
  }
}

public class Father extends Parents {
  @Override
  public void print(){
    System.out.println("Father");
  }
}

3.测试类

public class Test {

  public void find(Parents p){
    p.print();
  }
  public static void main(String[] args) {
    Test test = new Test();
    Mother mother = new Mother();
    test.find(mother);
  }

}

最后输出的是mother,将派生类的引用传给基类的引用,然后调用重写方法,基类的引用之所以能够找到应该调用的那个派生类的方法,就是因为程序在运行时进行了绑定。

多态的关键注意点

1.java中除了static 和 final方法外,其他所有的方法都是运行时绑定的。其中private方法都被隐式指定为final的,因此final方法不会在运行时绑定。当在派生类中重写基类中的static,final或private方法时,实质上是创建了一个新的方法。

2.在派生类中,对于基类的private方法,最好采用不同的名字。

3.包含抽象方法的类叫做抽象类。注意定义里面包含这样的意思,只要类中包含一个抽象方法,该类就是抽象类。抽象类在派生中就是作为基类的角色,为不同的子类提供通用的接口。

4.对象清理的顺序和创建的顺序相反,当然前提是自己手动清理对象,因为大家都知道java垃圾回收机制。

5.在基类的构造方法中小心调用基类中的被重写的方法,这里涉及到对象初始化顺序。

6.构造方法是被隐式声明为static方法。

7.用继承表达行为间的差异,用字段表达状态上的变化。

如何理解Java多态性?

通过类型转换,把一个对象当作它的基类对象对待。从相同的基类派生出来的多个派生类可被当作同一个类型对待,可对这些不同的类型进行相同的处理。这些不同派生类的对象响应同一个方法时的行为会有所差异的,这正是这些相似的类之间的区别。

动态绑定

将一个方法调用和一个方法主体连接到一起称为绑定(Bindings).

根据绑定的时机不同,分为“早期绑定”和“后期绑定”.

如果程序运行之前进行绑定(有编译器和链接程序完成)-->早期绑定;

如果在程序运行期间进行绑定,称为"后期绑定",后期绑定也称为 动态绑定 或 运行时绑定;

在java中,多态性是依靠动态绑定实现的,即java虚拟机在运行时确定要调用哪一个同名方法。

多态的应用

由于多态性,一个父类的引用变量可以指向不同的子类对象,并且在运行时根据父类引用变量所指向对象的实际类型执行相应的子类方法。

利用多态性进行二次分发。

利用多态性设计回调方法。

时间: 2024-12-21 00:25:14

java-面向对象的多态性摘要的相关文章

JAVA面向对象的多态性及抽象类和接口

一:Object类Object类是所有Java类的根基类("祖先类")如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类1.toString()方法 Object类中定义有public String toString()方法,其返回值是String类型,描述当前对象的有关信息. 如果直接打印某对象的引用,则默认会调用这个对象的toString()方法,默认打印的内容中包含这个引用所指向的内存地址.可以根据需要在用户自定义类中重写toString()方法.2

Java面向对象-对象的多态性

Java面向对象-对象的多态性 Java中的多态性表现: 1,方法的重载和重写(覆盖): 2,可以用父类的引用指向子类的具体实现,而且可以随时更换为其他子类的具体实现: 我们先搞个父类Animal: 1 package com.java1234.chap03.sec13; 2 3 public class Animal { 4 5 public void say(){ 6 System.out.println("我是一个动物"); 7 } 8 } 再搞两个子类,分别是Dog和Cat类,

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

java面向对象编程(七)--四大特征之多态

1.多态概念 多态性是对象多种表现形式的体现.比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫.小狗.蜥蜴等等.那么我到宠物店说"请给我一只宠物",服务员给我小猫.小狗或者蜥蜴都可以,我们就说"宠物"这个对象就具备多态性. java中的多态,就是指一个引用(类型)在不同情况下的多种状态.也可以理解成,多态是指通过指向父类的指针,来调用在不同子类中实现的方法.也可以理解为"一个接口,多个方法". 实现多态有两种

JAVA学习(五):Java面向对象编程基础

Java面向对象编程基础 面向对象(Object oriented programming,OOP)技术是一种强有力的软件开发方法,它採用数据抽象与信息隐藏技术,来使软件开发简单化,以达到代码重用的目的. 1.OOP的3个特性(封装.继承和多态性) 封装是类的基础.指把类的相关实现细节隐藏起来,在类中将数据和实现操作的代码集中起来放在对象的内部.调用这些类时仅仅需直接使用类预留的接口就能够了. 继承提供了子类自己主动拥有父类数据结构和方法的机制.它表示类之间的一种关系. 多态指使一个对象被看成还

第6篇-JAVA面向对象Ⅱ

第6篇-JAVA面向对象Ⅱ 每篇一句 :敢于向黑暗宣战的人,心中必定充满光明 初学心得: 面向对象 春暖花开 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-05| JAVA面向对象 Ⅱ] 1.JAVA面向对象三大特征 1.封装(Encapsulation); 2.继承(Inheritance); 3.多态(Polymorphism) 2.面向对象 之 封装 什么是封装? 封装就是隐藏实现细节,仅对外提供访问接口 封装的类型有:属性封装.方法封装.类封装.组件封装.模块化封装

Java面向对象编程(一)

由于常常将Java和C++面向对象编程的原则搞乱,所以这次把相关要点分别总结一下,本文主要总结Java面向对象编程. 面向对象编程的三大特性是:继承性(inheritance), 多态性(polymorphism)和封装性(encapsulation). 一. 继承性 [类修饰词列表] class 类名 [extends 父类名] [implements 借口列表名] { 类体 } class Employee { public int workYear; public Employee() {

20135234马启扬 实验二 Java面向对象程序设计

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1352  姓名:马启扬  学号:20135234 成绩:             指导教师:娄嘉鹏    实验日期:2015.5.7 实验密级:         预习程度:         实验时间:15:50--22:50 仪器组次:34         必修/选修: 选修            实验序号:02 实验名称:实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和T

Java面向对象详解

Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵懵懂懂,后来实践的多了,有些东西才慢慢清 楚:二是经过一定的实践之后,反过头来再去学习一些基础东西才能够理解的更透彻:三是有些东西基础但是确很重要,是值得好好搞一搞的. 1.面向对象 面向对象(Object Oriented)是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),

将子类对象引用赋值给超类对象 JAVA 编译时多态性

将子类对象引用赋值给超类对象 JAVA 编译时多态性(转) (2012-05-10 11:24:05) 转载▼ 标签: 杂谈 分类: 也无晴_soft 1.通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用. DerivedC c2=new DerivedC(); BaseClass a1= c2; //BaseClass 基类,DerivedC是继承自BaseClass的子类 a1.play(); //play()在BaseClass,DerivedC中均有定义,即子类覆写了该方法 分