多态

面向对象的特征

回眸只為那壹抹淺笑 提交于 2020-02-15 20:15:45
三大特征是:封装、继承和多态。   封装是指将某事物的 属性和行为 包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公布给其它对象。在java中能使用private、protected、public三种修饰符或不用(即默认defalut)对外部对象访问该对象的属性和行为进行限制。   protected在同包内的类及包外的子类能访问   继承是 子对象可以继承父对象的属性和行为 ,亦即父对象拥有的属性和行为,其子对象也就拥有了这些属性和行为。这非常类似大自然中的物种遗传。   多态不是很好解释:更倾向于使用java中的固定用法,即overriding(重写)和overload(重载)。多态则是体现在overriding(重写)上,而overload(重载)则不属于面向对象中多态的范畴,因为overload(重载)概念在非面向对象中也存在。overriding(重写)是面向对象中的多态,因为overriding(重写)是与继承紧密联系,是面向对象所特有的。 多态是指父对象中的同一个行为能在其多个子对象中有不同的表现 。也就是说子对象可以使用重写父对象中的行为,使其拥有不同于父对象和其它子对象的表现,这就是overriding(重写)。   多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。

关于java的重写

冷暖自知 提交于 2020-02-15 06:33:29
覆盖:又叫重写,Override。多态是java的特性,覆盖是表现多态特性的具体做法。《Effective Java》有一个章节特别提出了,如 果是覆盖方法,请一定记得加上@Override 重写父类实现多态 当我们想调用父类的属性和方法,使用super. 来源: CSDN 作者: jccccccc@ 链接: https://blog.csdn.net/weixin_44771582/article/details/104311007

Java 中的封装、继承与多态

与世无争的帅哥 提交于 2020-02-15 05:50:12
在前面的 《 Java — 面向对象的编程语言》 里,介绍了面向对象的三大特征:封装、继承、多态,主要是概念上的讲解,本篇文章将从代码出发,看看 Java 中的封装、继承与多态。 一、封装 在编程时,把数据(属性)和有关属性的一些操作(方法)绑定在一起,形成一个不可分开的集合(类),这个过程就是封装( Encapsulation )。 封装时,我们需要隐藏对象的属性和实现细节,仅对外公开接口,并控制在程序中属性的读和写的 访问级别 。 一般情况下,我们会把所有的属性都 私有化 ,对每个属性提供 getter (读) 和 setter (写) 方法,供外界使用: public class Person { private String name ; private int age ; public String getName ( ) { return name ; } public void setName ( String name ) { this . name = name ; } public int getAge ( ) { return age ; } public void setAge ( int age ) { this . age = age ; } } public class Me { public static void main ( String [ ]

面向对象——多态

随声附和 提交于 2020-02-15 03:50:12
多态 1 . extends 继承或者 implements 实现,是 多态性 的前提。 2. 一个对象拥有多种形态 ,这就是:对象的多态性。例如:小明是一个对象,这个对象既有学生形态,也有人类形态。 3. 代码当中体现多态性,其实就是一句话: 父类引用指向子类对象 。 // 格式:继承 父类名称 对象名 = new 子类名称(); // 或者格式:接口 接口名称 对象名 = new 实现类名称(); 4. 访问成员变量的两种方式: 直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。 间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。 5. 在多态的代码当中,成员方法的访问规则是:看new的是谁,就优先用谁,没有则向上找。 总结:(编译只的是编译时,即eclipse、IDEA等集成软件中敲代码时;运行时点击运行后) 成员方法:编译看左边,运行看右边。 成员变量:编译看左边,运行还看左边。 6. 好处:无论右边new的时候换成那个子类对象,等号左边调用方法都不会变化。 7. 对象的向上转型,其实就是多态写法:格式:父类名称 对象名 = new 子类名称(); a. 含义:右侧创建一个子类对象,把它当做父类来看待使用。 b. 注意事项: 向上转型一定是安全的。从小范围转向了大范围。 弊端: 对象一旦向上转型为父类,那么就无法调用子类原本持有的内容

C++总结(四)

主宰稳场 提交于 2020-02-15 02:23:48
一、多态 1.多态的概念 多态:同一个事物,在不同场景下表现出的不同的状态 2.多态的分类 静态多态(早绑定,静态联编): 在编译期间,根据所传递的实参类型或者实例化的类型,来确定到底应该调用那个函数即:在编译期间确定了函数的行为—函数重载、模板 动态多态(晚绑定,动态联编):在程序运行时,确定具体应该调用那个函数 3.动态多态的实现条件-- -在继承的体系中 虚函数&重写:基类中必须包含有虚函数(被virtual修饰的成员函数),派生类必须要对基类的虚函数进行重写 关于虚函数调用:必须通过基类的指针或引用调用虚函数 体现:在程序运行时,基类的指针或引用指向那个子类的对象,就会调用那个子类的虚函数 4.重写 1.基类中的函数一定是虚函数 2.派生类虚函数必须与基类虚函数的原型一致:返回值类型 函数名字(参数列表) 例外: a、协变–基类虚函数返回值基类的指针或引用 派生类虚函数返回派生类的指针或引用基类虚函数和派生类虚函数的返回值类型可以不同 b、析构函数:如果将基类中析构函数设置成虚函数,派生类的析构函数提供,两个析构函数就可以构成重写;两个析构函数名字不同 3.基类虚函数可以和派生类虚函数的访问权限不一-样 4、为了让编译器在编译期间帮助用户检测是否重写成功,C+ +11提供非常有用的关键字 1、override:专门]让编译帮助用户检测派生类是否成功重写了基类的虚函数

C++——多态

99封情书 提交于 2020-02-14 23:35:38
文章目录 多态 函数重写(虚函数覆盖)、多态的概念 函数重写要求(虚函数覆盖条件) 多态的条件 纯虚函数、抽象类和纯抽象类 多态原理 虚析构函数 代码示例 多态 例如:实现图形库,可以用于显示多种图形 图形 ( 位置/绘制 ) / \ 矩形 ( 长和宽/绘制 ) 圆形 ( 半径/绘制 ) 函数重写(虚函数覆盖)、多态的概念 如果将基类中的某个成员函数声明为虚函数,那么其子类中与该函数具有相同原型的成员函数也就是虚函数,并且对基类版本形成覆盖,即函数重写。 此时,通过指向子类对象的基类指针,或引用子类对象的基类引用,调用虚函数,实际被执行的将是子类中的覆盖版本,而不再是基类中原始版本,这种语法现象称为多态。 函数重写要求(虚函数覆盖条件) 只有类中成员函数才能被声明为虚函数,全局函数、静态成员函数、构造函数都不能为虚函数。(析构函数可以为虚函数) 只有在基类中以 virtual 关键字修饰的成员函数才能作为虚函数被子类覆盖,而与子类中 virtual 无关。 虚函数在子类中的版本和基类中的版本要具有相同的函数签名,即函数名、参数表、常属性一致。 如果基类中的虚函数返回基本类型的数据,那么该函数在子类中的版本必须返回相同类型的数据。 如果基类中的虚函数返回的是类类型的指针(A*)或引用(A&),那么允许子类的版本返回其子类类型的指针(B*)或引用(B&)——类型协变。 class A

Java--接口、多态

∥☆過路亽.° 提交于 2020-02-14 15:10:26
接口 概述 接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么 接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法 (JDK 9)。 接口的定义 ,它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并 不是类,而是另外一种引用数据类型。 引用数据类型:数组,类,接口。 接口的使用,它不能创建对象,但是可以被实现( implements ,类似于被继承)。一个实现接口的类(可以看做 是接口的子类),需要实现接口中所有的抽象方法,创建该类对象,就可以调用方法了,否则它必须是一个抽象 类。 定义格式 public interface 接口名称 { // 抽象方法 // 默认方法 // 静态方法 // 私有方法 } 含有抽象方法 抽象方法:使用 abstract 关键字修饰,可以省略, 没有方法体 。该方法供子类实现使用。 含有默认方法和静态方法 默认方法:使用 default 修饰,不可省略,供子类调用或者子类重写。 静态方法:使用 static 修饰,供接口直接调用。 public interface InterFaceName { public default void method ( ) { // 执行语句 }

继承和多态

对着背影说爱祢 提交于 2020-02-14 04:26:50
一.继承概述   1.什么是继承:   如果类A继承自类B,类B又继承类C,那么根继承的传递性类A也可以具备类C的属性和方法   我们需要注意的是,如果一个类我们眼睛去看的时候没有继承任何类,那么默认继承object   2.如何避免这种冗余   创建一个新的Employee,将PM类和SE类中的公共属性都提取出来放在这个类中   删除PM和SE类中的公共部分,保留他们各自独有的成员   编写代码验证是否成功复用代码,PM类和SE类还能否提取出来的属性 二.继承的概念   继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用已存在的类的功能   继承:在C#中,类可以继承自另一个类      衍生的类(子类)继承父类的方法和数据成员     语法:       class 子类:父类         {             }     父类叫基类 子类叫派生类 三.关键字base的作用   可以调用父类的属性,也可以调用自身的属性 四.子类的构造函数 1.继承机制很好的解决了代码复用的问题 2.子类继承父类的成员,并且可以拥有自己特有的成员 3.base关键字可以调用父类的属性,方法和构造函数 4.在子类中,如果不使用base关键字来显示调用基类的构造函数则将隐式调用默认的构造函数 5

初识继承和多态

一个人想着一个人 提交于 2020-02-14 04:23:42
什么是继承 继承是使用已经存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用已存在的类的功能。 继承是面向对象编程中的一个非常重要的特性。在有继承关系的二个类中,子类不仅具有自己独立有的成员,还具有父类的成员 继承关系在类图中表示一个箭头,箭头指向的是父类 base关键字和protected修饰符 都知道this表示当前实例,通过他可以访问类本身的成员,C#中还有一个关键字base,他表示父类,可以用于访问父类的成员。 在子类中可以用base调用父类的属性。实际上,还可以用base关键字调用父类的方法及父类的构造函数 父类中的成员如果用private修饰,他将作为私有成员,其他任何类都无法访问。如果设置为public成员,任何类都可以访问该成员。 在C#中提供了另一种访问修饰符protected,被这个访问修饰符修饰的成员允许被其子类访问,而不允许其他非子类访问 public ,private ,protected的区别 修饰符 类内部 子类 其他类 public 可以 可以 可以 protected 可以 可以 不可以 public 可以 不可以 不可以 可以看出,三种访问修饰符对类成员的访问限制强度:private>protected>public 子类构造函数 隐式调用父类构造函数 is a 的应用 继承的价值 体会一下继承的特点

多态、虚函数

半世苍凉 提交于 2020-02-13 23:38:38
1.( 1)派生类和基类的成员函数同名的处理 #include<iostream> #include<string> using namespace std; class A { private: int a; public: A(int x) { a = x; } void setA(int x) { a = x; } void show() { cout << "基类A=" << a << endl; } }; class C :public A { //公有继承 A private: int c; public: C(int a, int b, int c1) :A(a) { c = c1; } //派生类构造函数 void setC(int x, int y) { c = x; } void showC() { cout << "c=" << c << endl; } /*void show() { cout << "派生类C=" << c << endl; }*/ void show() { A::show(); cout << "派生类C=" << c << endl; } }; void main() { A ta(12); C tc(1, 2, 3); ta.show(); tc.show(); } ▲main函数中的ta.show() 和tc.show(