首页 > 其他分享 >多态和抽象类

多态和抽象类

时间:2024-09-03 09:26:55浏览次数:4  
标签:实现 多态 接口 继承 抽象 抽象类

多态

多态表示不同的对象可以执行相同的动作,但是要通过它们自己的实现代码来执行。
多态的原理是当方法被调用时,无论对象是否背转换为其父类,都只有位于对象继承链最末端的方法实现会被调用。也就是所,虚方法(抽象方法)是按照其运行时类型而非编译时类型进行动态绑定调用的。
要深刻理解多态,不去研究设计模式是很难做到的。也可以反过来说,没有学过设计模式,那么对多态乃至对面向对象的理解多半都是肤浅和片面的。

抽象类

  1. 抽象类不能实例化
  2. 抽象方法是必须被子类重写的方法
  3. 如果类中包含抽象方法,那么类必须定义为抽象类,不论是否还包含其他一般方法
  4. 抽象类拥有尽可能多的共同代码,拥有尽可能少的数据
    抽象类通常代表一个抽象概念,它提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点应当是抽象类。

接口和抽象类的异同

相同点:

抽象类和接口都是在抽象结果,共性就是抽象。其实,不论是接口、抽象类、类甚至对象,都是在不同层次、不同角度进行抽象的结果。

不同点:

  1. 抽象类可以给出一些成员的实现,接口不包含成员的实现(新版本的jdk支持了接口default方法默认实现)
  2. 抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现,一个类只能继承一个抽象类,但可以实现多个接口

总结:

  1. 类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象,本质上都是抽象。
  2. 接口是对类的局部(行为)进行的抽象,而抽象类是对类整体(字段、属性、方法)的抽象。如果只关注行为抽象,那么也可以认为接口就是抽象类。
  3. 如果行为跨越不同类的对象,可使用接口,对于一些相似的类对象,用继承抽象类。比如猫狗其实都是动物,它们之间有血多相似之处,所以我们应该让它们继承动物这个抽象类,而飞机、麻雀、超人是完全不相关的类,叮当是动漫角色,孙悟空是古代神话人物,都是不想管的类,但是他们又有共同点,这时就需要都实现fly这个接口了。
  4. 通过上文不难发现,继承抽象类和实现接口不冲突,比如超人,除了内裤穿外面,基本就是个正常人的样子,所以让他继承人的类是对的,他还会飞,飞这个能力也可能是其他对象具备的,所以就让超人去实现飞行、力大无穷等接口,这样就可以让超人和飞机比飞行,和大象比力气了,这就是一个类只能继承一个抽象类,却可以实现多个接口的做法。
  5. 从设计角度来讲,抽象类是从子类中发现了公共的东西,泛化出父类,而接口是从根本不知子类的存在,方法如何实现还不确定,预先定义。这是抽象类和接口设计的思路不同。这也是敏捷开发的思想,通过重构改善既有代码的设计。抽象类是自底向上抽象出来的,而接口则是从顶向下设计出来的

标签:实现,多态,接口,继承,抽象,抽象类
From: https://www.cnblogs.com/alvisClub/p/18393926

相关文章

  • Java 面向对象编程的四个基本原则(封装、继承、多态和抽象),并给出一个简单的例子说明如
    面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。在Java中,面向对象编程的四个基本原则是封装、继承、多态和抽象。每个原则都有其特定的目标,帮助开发者构建更加模块化、可维护和可扩展的代码。封装封装是指将数据(属性)和行为(方法)捆绑在一起,并隐藏对象的具体实现细......
  • 49. 静态联编动态联编及多态原理
    静态联编动态联编静态多态(就是函数重载)和动态多态静态多态:函数重载,运算符重载动态多态://先有继承关系//父类中有虚函数,子类重写父类中的虚函数//父类的指针或引用指向子类的对象静态多态在编译阶段绑定地址,地址早绑定,静态联编动态多次在运行阶段绑定地址,地址晚绑定,动态联......
  • 69. 异常的多态使用
    异常的多态使用提供基类异常类classBaseException纯虚函数virtualvoidprintError()=0;子类空指针异常和越界异常继承BaseException重写virtualvoidprintError()测试利用父类引用指向子类对象#define_CRT_SECURE_NO_WARNINGS#include<iostream>usingname......
  • JAVA基础之三-接口和抽象类
    java提供了抽象类和接口,总体是好事。有的OOP语言并没有接口的概念,但相当一部分其实用其它方式实现了JAVA中接口类似的功能。如果不太清楚二者的区别,难免在面临具体业务的时候,在二者之间摇摆。---实际上,关于抽象类和接口的共同点和不同点没有什么可以写的。设计原则原则让我们......
  • (大三上_游戏开发设计模式_上课_1)多态练习_计算机
    灵活性,可扩展,灵活性,可维护封装继承:要有基类代码片段写整个属性    基类里面 基态      基方向,虚方法//虚方法,可以写在实例方法里 publicvirtualdoubleGetResult() {  return0;}实例方法,可以创建实例抽象方法,要写在抽......
  • Java中抽象类的学习
    抽象类目录抽象类抽象类的概念抽象类的好处1.代码复用与简化2.强制实现特定方法3.隐藏实现细节4.支持扩展性和灵活性5.公共服务功能6.稳定的抽象层依赖抽象类的概念在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个......
  • 11.多态
    11.多态(Polymorphism)11.1引言使用多态性,可以设计和实现易于扩展的系统,只要新类是程序通常处理的继承层次结构的一部分,就可以添加新类,而无需对程序的常规部分进行修改。程序中唯一必须更改以适应新类的部分是那些需要直接了解添加到层次结构中的新类的部分。例如,如果我们创建......
  • C++ 135类和对象_面像对像_多态
    135类和对象_面像对像_多态学习内容 1.抽象类 2.虚函数 3.纯虚函数动态多态满足条件1.有继承关系2.子类重写父类函数3.用父类的函数指针指向子类的对象AnimalBaseModel&animal代码#include<iostream>usingnamespacestd;//cout在这里,没有它会报错#includ......
  • day02-面向对象-多态&抽象类&接口
    一、⭐多态⭐1.1概述1.多态  是在继承/实现情况下的一种现象,表现为对象多态和行为多态​2.⭐对象多态写法:​继承:父类变量=new子类1();​父类变量=new子类2();实现:接口变量=new实现类();​......
  • PHP8面向对象快速入门三 类的继承 类方法属性重写和final关键字 parent调用父类的方法
    在PHP中,类的继承(继承)是一种机制,允许一个类继承另一个类的属性和方法,从而实现代码的重用和扩展。继承可以帮助你创建一个基于现有类的新类,保留原有类的特性并增加或修改其功能。classAnimal{public$name='dongwu';protected$age=1;private......