java面向对象之多态(代码片段)

Guardingandtrust Guardingandtrust     2023-01-05     635

关键词:

Java三大特性之多态

本章内容:

1.多态的含义

2.多态的实现

3.小结

 

1.多态的含义

       多态,是Java面向对象的三大特性之一,使用之地特别广泛。那么什么是多态呢?多态是同一个行为具有多个不同表现形式或形态的能力。比如炒菜这个行为在不同厨师身上会产生不同的结果或者表现。多态实际上就是类型或方法的混合使用模式,多应用于数组、方法的重载,类与类之间的重写中,使用多态让程序更具有扩展性。

2.多态的实现

  • 在Java中多态的实现有多种方式,但是比较重要的有以下几种方式:

(1)方法的重载

  • 那么重载是什么呢?其实重载很好理解。是否还记得类中的方法,在传统语言通过名称区分方法,所以类中的方法名都是唯一的,但事实上有很多方法执行的工作几乎相同,仅仅只是参数不同,参考以下代码:
Random random = new Random();
int a = random.nextInt();   // 生成一个没有规定范围的随机整数
int b = random.nextInt(10); // 生成一个10以内的随机整数
  • 上面的代码中使用了随机生成器的同一个方法 nextInt 但是结果或者效果不一样,同是生成随机数,完全没必要写成两个不同的方法,比如 nextNoRangeInt() 和 nextIntInRange(int range) ,这实际上就是方法重载的实现。简单的说就是方法名称一样,但是参数类型或参数的数量不同。注意:衡量重载的标准是参数,而不能是返回值!!!

(2)方法的重写

  • 方法重写的实现是在类与类之间的方法进行覆盖,比如子类不满足于父类方法的实现方式,允许重写父类的方法,实现不一样的逻辑。代码如下:
class Animal //定义一个动物类 父类
    public void call()
        System.out.println("动物在叫");
    

class Dog extends Animal //定义一个继承于动物类的狗类
    @Override
    public void call()
        System.out.println("狗在叫:旺旺");
    

class Cat extends Animal //定义一个继承于动物类的猫类
    @Override
    public void call()
        System.out.println("猫在叫:喵喵");
    
 
//入口函数
public static void main(String args[])
	Animal animal = new Animal();
	animal.call(); // 动物在叫
	Dog dog = new Dog();
	dog.call(); // 狗在叫:旺旺
	Cat cat = new Cat();
	cat.call(); // 猫在叫:喵喵

  • 以上就是方法的重写,是否发现上述代码中 call() 方法被重写,所以每个子类调用后的结果不一样。注意:重写为了避免一些问题,比如【子类第一个方法看似重写,实际上和父类方法无任何关系
    ;子类第二个方法可能在不知情的情况下重写了父类的方法】。因此要加上一个注释:"@Override"!!!
    方法重写实现多态的条件:
    (1)必须有继承关系
    (2)要有方法的重写:方法签名完全一样

(3)转型实现多态

  • 是否还记得基本类型的相互转换吗?其实在复杂数据类型中也是有转换的,这种转换分为:向上转型和向下转型。 向下转型就类似于基本数据类型的自动类型转换,而向上转型则类似与基本数据类型的强制转换!那么多态如何实现的呢?请看下列代码:
//入口函数
public static void main(String args[])
	Animal dog = new Dog(); // 引用类型是父类,实际对象为子类
	dog.call(); // 狗在叫:旺旺
	Animal cat = new Cat(); // 引用类型是父类,实际对象为子类
	cat.call(); // 猫在叫:喵喵
  • 请看上述代码,使用的变量类型是父类,而实际运行后调用的是子类的方法,可见方法的重写只能在运行期才能具体知道,由此可见这也是多态的一种形式。

3.小结

  • 以就是多态的大致内容,多态在Java中是一个很重要的知识点,了解多态,,可以减少代码冗余和增强代码的扩展性。
  • 以下来总结一下重写和重载的区别:
  • 重载支持 static 静态方法。

        严格来讲重载的各个方法是完全不同的,重载的方法最终根据参数区分,即给我什么就干什么;而重写实际上是子类重写了父类的方法,重写的方法最终根据当前所操作的对象来区分,即让谁去做就做出什么结果。
        值得注意的是,作为方法参数,子类和父类是不同的类型,在同一个类或者有继承关系的类中,同名方法表现的是重载而非重写:


class A
    public void method(Animal animal) 
    public void method(Dog animal)  // 重载

class B extends A
    public void method(Cat cat)     // 重载

  • 注意:属性、静态方法不能重写!

java面向对象三大特征之继承和多态(代码片段)

...转型多态代码案例总结前言  上一篇博客我们介绍了Java面向对象思想以及三大特征之一的封装。本文将介绍面向对象三大特征的剩下两个特征——继承和多态,我个人认为继承和多态是三个特征中比较重要且理解起来稍有... 查看详情

java中面向对象三大特性之——多态(代码片段)

多态的概述: 多态是继封装、继承之后,面向对象的第三大特性。生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样的。可见,同一行为,通过不同的... 查看详情

java基础8---面向对象之多态抽象类接口(代码片段)

一、多态polymorphic1.多态的前提要有继承关系。要有方法重写。要有父类引用指向子类对象。2.多态中的成员访问特点1)成员变量编译看左边(父类),运行看左边(父类)。//多态:成员变量的访问publicclassPolymorphic_Demopubli... 查看详情

2019-05-17java学习日记之面向对象_多态&抽象类&接口(代码片段)

多态 多态的概述:A:多态(polymorphic)事物存在的多种形态B:多态前提a:要有继承关系b:要有方法重写c:要有父类引用指向子类对象多态中的成员访问特点之成员变量:成员变量:编译看左边(父类),运行看左边(父... 查看详情

重新认识java----面向对象之多态(向上转型与向下转型)(代码片段)

多态,大概每个人都知道。但是,又有几个人真的理解什么是多态、多态有哪些细节呢?如果你看到这篇文章的名字,脑海中对多态没有一个清晰的概念,不妨点进来看看,也许会有收获。什么是多态简单... 查看详情

面向对象之多态与多态性(代码片段)

一、多态  1、定义:指的是一类事物的多种形态,如水有液体、气体和固体三种形态, 动物有人、猫、狗等存在形态。  2、示例:#!/usr/bin/envpython3#-*-coding:utf-8-*-importabcclassAnimal(metaclass=abc.ABCMeta):#同一类事物@abc.abstract... 查看详情

面向对象之多态(代码片段)

多态的概念多态指的是一类事物的多种形态,例如水有固态、液态、气态,动物有人、狗、猪,这是动物的不同形态。可能你会领悟,人狗猪不是继承于动物类吗?没错,多态在程序中的表现形式就是依赖于继承多态性那多态到... 查看详情

面向对象的三大特性之多态(代码片段)

#面向对象的三大特性之多态#多态由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同#多态的概念指出了对象如何通过他们的属性和动作来操作及访问,而不需要考虑他们具体的类#多态表明了动态(运行时)绑定... 查看详情

python面向对象之多态(代码片段)

多态第一阶段:判断一个变量是否是某个类型可以用isinstance()判断classAnimal(object):defrun(self):print("Animalisrunning")classDog(Animal):defrun(self):print("Dogisrunning")classCat(Animal):defrun(self):print 查看详情

面向对象三大特性之多态与多态性(代码片段)

一、多态‘‘‘多态:同一事物的多种形态‘‘‘#文件的多种形态:classFile:defclick(self):passclassTextFile(File):defread(self):print(‘文本文件双击可以查看内容‘)classExeFile(File):defexe(self):print(‘可执行文件双击可以执行‘)file1=TextFile()file2... 查看详情

5_面向对象-中之面向对象的特征三:多态性(代码片段)

1.多态性的理解:可以理解为一个事物的多种形态。2.何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)举例:Personp=newMan();Objectobj=newDate();3.多态性的使用:虚拟方法调用  >有了对象... 查看详情

java基础8---面向对象之多态抽象类接口(代码片段)

一、多态polymorphic1.多态的前提要有继承关系。要有方法重写。要有父类引用指向子类对象。2.多态中的成员访问特点1)成员变量编译看左边(父类),运行看左边(父类)。//多态:成员变量的访问publicclassPolymorphic_Demopubli... 查看详情

面向对象三大特征之多态(代码片段)

面向对象的三大特征:封装、继承、多态。今天重点来看一下“多态”。封装  指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。将属性或方法进行封装,防止外部程序随机访问,加强代码的安全性。继承&n... 查看详情

第九篇:面向对象之多态与封装(代码片段)

一多态多态指的是一类事物有多种形态动物有多种形态:人,狗,猪(咳咳~人也是猴子进化来的,不允许反驳) importabcclassAnimal(metaclass=abc.ABCMeta):#同一类事物:动物@abc.abstractmethoddeftalk(self):passclassPeople(Animal):#动物的形态之一... 查看详情

java面向对象之多态

1、首先还是捋顺概念问题:多态就是同一方法用在不同的对象时有不同的解释,比如说9点准时上班,都是上班的方法,但是程序员在写程序,财务在点钱,HR在发布广告一样。2、说完概念了现在说下它的用处和好处:在说多态... 查看详情

面向对象特征之多态性(代码片段)

多态含义:1.在同一个方法中,这种由于参数类型不同而导致执行效果各异的现象。2.在Java中,子类的对象可以替代父类的对象使用。  ?一个变量只能有一种确定的数据类型  ?一个引用类型变量可能指向(引用)多种不同类型... 查看详情

golang如何体现面向对象三大特征之多态?(代码片段)

...多态数组基本介绍变量(实例)具有多种形态。面向对象的三大特征,在Go语言,多态特征是通过接口实现的。可以按照统一的接口来调用不同的实现。这时接口变量就呈现不同的形态。快速入门在前面的Usb接口... 查看详情

测开之面向对象进阶篇・《多态》(代码片段)

面向对象三大特征面向对象编辑的三大特征:封装、继承、多态。封装:客观的失误封装成类(将数据和方法放在一个类中构成了封装)。继承:python中一个类可以继承于一个类,也可以继承多个类,... 查看详情