菜鸟笔记 -- Chapter 6.4.3 多态

6.4.3  多态

  多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

  简单来说,就是将子类对象传递给父类对象,由JVM动态控制具体调用的是哪个类中的方法.继承和重写是多态的基础,

  利用多态可以使程序具有良好的扩展性,并可以对所有类对象进行通用的处理.这种将子类对象视为父类对象的做法也叫”向上转型”.使用多态节省了开发和维护时间,因为程序员无须在所有的子类中定义执行相同功能的方法,避免了大量重复代码的开发,同时只要实例化一个继承父类的子类对象即可调用相应的方法,这里只需要维护父类中的方法即可.多态性实现了只维护父类,子类的功能实现通过父类来控制.看下面一个代码:

package cn.yourick.duotai;

public abstract class ParentDemo {
    public abstract int test(int i,int a);
}
package cn.yourick.duotai;

public class SonDemo extends ParentDemo{
    @Override
    public int test(int i, int a) {
        return i+a;
    }
}
package cn.yourick.duotai;
public class SonTest extends ParentDemo{
    @Override
    public int test(int i, int a) {
        return a*i;
    }
}
package cn.yourick.duotai;
public class Test {
    @org.junit.Test
    public void test1(){
        ParentDemo parentDemo = new SonDemo();
        System.out.println("加法:"+parentDemo.test(2, 3));
    }
    @org.junit.Test
    public void test2(){
        ParentDemo parentDemo = new SonTest();
        System.out.println("乘法:"+parentDemo.test(2, 3));
    }
}

  上面这些代码就很简单的实现了多态,我们在抽象类中声明了一个方法,通过不同的父类进行不同的实现,然后将对象传递给父类,此时只需要维护父类就可以了,通过传递不同的子类传递,调用不同的方法,实现不同的功能,如上的加法和乘法.

多态的好处:

  • l 可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
  • l 可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性
  • l 接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
  • l 灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
  • 简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
时间: 2024-10-08 23:07:40

菜鸟笔记 -- Chapter 6.4.3 多态的相关文章

菜鸟笔记 -- Chapter 6.4 面向对象的三大特性

6.4.1  三大特性概述 面向对象的三大特性是Java中一个很重要的基本理念. 封装是面向对象的核心思想.将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的意思.采用封装的思想保证了类内部数据结构的完整性,应用该类的用户不能轻易地直接操作此数据结构,只能执行类允许公开的数据.这样就避免了外部操作对内部数据的影响,提高了程序的可维护性. 继承和多态是面向对象开发语言中非常重要的一个环节,如果在程序中使用得当,可以将整个程序的架构变的非常有弹性,同时可以减少代码的冗

菜鸟笔记 -- Chapter 3.1 计算机的基础

3.1 计算机的基础知识 每次想写些什么的时候,发现总是避不过计算机这块,在菜鸟笔记 Chapter 1 计算机从0讲起简单介绍一下计算机硬件,以后计划在线程和并发中详细介绍一下计算机的运行原理.这里我们还是先简单介绍一下计算机. 3.1.1 计算机 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件所组成,没有安装任何软件的计算机称为裸机.常见的形式有台式计算机.笔记本计算机.大型计算机等. 计算机的应用已渗透

菜鸟笔记 -- Chapter 3.4 环境变量

3.4 Java环境的搭建 工欲善其事必先利其器.在学习Java语言之前,必须了解并搭建好它所需要的开发环境.要编译和执行Java程序,JDK(Java Developers Kits)是必备的.下面将具体认识下JDK和JRE,并进行介绍下载安装JDK和配置环境变量的方法. 3.4.1 Java的跨平台 Java的跨平台是指:通过Java语言编写的应用程序在不同的系统平台上都可以运行.在这里我们要对平台进行一下解读,在菜鸟笔记 Chapter 1 计算机从0讲起中我们知道了OS的出现是为所有的开

菜鸟笔记 -- Chapter 3.5 人生的第一个Java程序Hello World

3.5 第一个Java程序“Hello World” 3.5.1 工具介绍 编写Java程序可以使用很多种工具 l notepad(微软操作系统自带) l Notepad++ l Eclipse l MyEclipse 我们在初始学习阶段先通过Notepad++来学习,这样我们可以更直观的看到程序运行的流程. 3.5.2 HelloWorld 源代码 class HelloWorld{ public static void main(String[] args){ System.out.prin

菜鸟笔记 -- Chapter 3.2 Java简介

3.2 Java简介 Java是一种高级的面向对象的程序设计语言.使用Java语言编写的程序是跨平台的,从PC机到手持电脑都有Java开发的程序和游戏,Java程序可以在任何计算机.操作系统和支持Java的硬件设备上运行. 3.2.1 Java语言的历史 Java语言是Sun公司于1990年开发的,当时Green项目小组的研究人员正在致力于为未来的智能设备开发一种新的编程语言.由于该小组的成员James Gosling 对C++语言在执行过程中的表现非常不满,就把自己封闭在办公室里编写了一种新的

菜鸟笔记 -- Chapter 5.4 Dead Code

不知道有没有前辈注意过,当你编写一段“废话式的代码时”会给出一个Dead Code警告,点击警告,那么你所写的废物代码会被编译器消除,那么如果你不理睬这个警告呢?编译后会是什么样的呢?下面我们写点代码,来查看一下编译后的结果,这里使用反编译工具jd-gui.exe.代码如下: package cn.five.four; public class Test { public static void main(String[] args) { int a = 7; int b = 9; test1(

菜鸟笔记 -- Chapter 6 面向对象

在Java语言中经常被提到的两个词汇是类与对象,实质上可以将类看作是对象的载体,它定义了对象所具有的功能.学习Java语言必须要掌握类与对象,这样可以从深层次去理解Java这种面向对象语言的开发理念,使程序员更好.更快地掌握Java编程思想与编程方式,掌握类与对象是学习理清Java语言的基础.            

菜鸟笔记 -- Chapter 09 常见类和接口

Java为我们提供了丰富的jar包支持,这其中很多都是我们日常开发所必须的,了解这些包和类,十分有助于我们的开发,深度了解源代码也有助于我们代码的优化和提高;JDK1.8为我们提供了多于4000个类与接口;我们主要从功能模块和特性来认识这些类和接口;如下: 用于比较的两个接口: Comparable:java.lang.Comparable<T> CompareTo()方法来源于此,Java中所有的比较功能,基本都源于这个接口,根据不同的类,有不同的实现; Comparator:java.ut

《Thinking in C++》读书笔记——Chapter 3: The C in C++ (2)

Chapter3: The C in C++ (2) Bitwise operators (1)The bitwise exclusive or, or xor (^) produces a one in the output bit if one or the other input bit is a one, but not both. (2)Bitwise operators can be combined with the = sign to unite the operation an