类的继承
继承和多态是面向对象语言的基本特性,以下是我关于继承和多态的理解和总结,可能有些表述不准确的地方,请大家指正:
1.继承指的是子类继承父类的属性和方法且一个类只能有一个父类,它可以减少重复代码的编写和对代码实现拓展。
2.理论上父类的所有属性和方法都能被子类继承,但父类的私有成员和构造函数是不能在子类中直接调用的,要访问父类的私有属性,必须要用get方法。
3.继承的两种情况
在同一包内继承:子类及子类创建的对象能访问父类的public,protect以及默认的属性和方法;
在不同包的继承:子类能访问父类的public,protect的属性和方法,而子类创建的对象只能问public的属性和方法。
private只能在自己类中访问,public能在所有类中访问,defaut默认的能在同一个包内访问,protect能在同一包内及子类中访问。而这些都能在自己类中访问。
作用域 当前类 同一package 子孙类 其它package
public true true true true
protected true true true false
defaut true true false false
private true false false false
注: 对于default类型修饰词,如果其子孙类与父类如果是位于同一个包内,则子孙类中的方法可以访问无修饰词修饰的父类方法;如果子孙类与父类是位于不同的包内,则子孙类中的方法无法访问父类中的无修饰词修饰的父类方法。
4.在子类中可以重写父类的方法(函数名,返回类型,参数都要一样),也可以在子类中对父类的方法进行重载,但子类重写后调不到父类的方法了,自能在类内部使用关键字super调用,而子类的对象调不到。
注意:
1.只有可被继承的方法才能被重写,否则写出来的方法是一个新方法。
2.重写的方法访问权限不能低于被重写的方法(public不能重写为protected),但抛出的异常范围不能高于被重写方法。
3.重写只能用在非静态方法之间(不能用非静态方法重写静态方法,也不能用静态方法重写非静态方法,这些编译都会报错),静态方法重写静态方法(编译不会报错但达不到重写的目的了,所以不叫重写)。因为:
static/final 方法的调用使用的静态绑定策略,在编译阶段,编译器就可以根据引用类型A来确定需要调用A中的getMember()。
而普通方法的调用采用的是动态绑定策略(在运行阶段需要考虑引用类型和实际类型(new)),这里就不多说了。
4.静态方法和数据域(有static关键字的),子类方法重写没有进行覆盖而是隐藏了,形成隐藏域子类可以用super关键字和类名进行调用。
5.自动转型(向上转型):这是实现多态的机制。父类的创建的对象但用了子类的构造函数例如Animal a = new cat(),或将子类创建的对象feed(cat)作为参数传给形参为父类类型的函数 feed(Animal a).是自动转型的两种形式。且子类一旦自动转型为父类,就只能调用父类中已定义的方法(但执行的是子类重写后的方法)而不能调用子类中自己独有的方法。
强制转换(向下转型):这是使用(子类)进行强制转换,但必须要是子类,可用instanceof先做判断,从而提高代码健壮性。
6.重写函数的调用:一个对象是调用父类的函数还是子类重写的方法看他实例化对象时是用的谁的构造函数,那么就调用谁的方法。
7.构造方法链:在实例化子类是默认先调用父类的无参构造方法(用super关键字可调用有参构造方法)。一个类若没有声明构造方法,默认有一个无参构造方法,若声明了有参的构造方法,则无参构造方法被覆盖,所以类要拓展时最好声明一个无参构造方法,避免编译出错。
8.super关键子:可用来调用父类的方法,但是不可super.super.A(),这样连续调用。
9.多态:
使用多态的原因
使用多态的程序的可维护性和可扩展性增强
多态分类
静态多态:
静态多态也称编译时多态,即在编译时决定调用哪种方法;
静态多态一般指方法重载;
只要构成了方法重载,就可以认为形成了静态多态的条件;
静态多态与是否发生继承没有必然联系
动态多态:
动态多态也称运行时多态,即在运行时才能决定调用哪个方法;
必须要有继承关系存在(父类可以是抽象类,普通类,甚至子类可以实现接口);
在继承中必须要有方法的覆盖;
必须由父类的应用指向子类的实例,并且通过父类的引用调用被覆盖的方法(实现的是子类重写后的方法)
相关推荐
类继承与多态PPT学习教案.pptx
在C++编程语言中,继承和多态是面向对象编程(OOP)的两个核心概念。继承允许我们创建一个新类(子类),它继承了另一个类(父类)的属性和方法,从而实现了代码的重用和扩展。多态则是指同一种行为在不同对象上表现...
在这个"继承与多态程序演示"中,我们将深入探讨这两个概念,以及如何在Microsoft Foundation Classes (MFC) 框架下实现它们。 首先,让我们了解什么是继承。继承是一种设计模式,允许一个类(子类或派生类)从另一...
在本实验报告中,我们将深入探讨Java编程中的两个核心概念:类的继承和多态的应用。实验主要目标是加深对抽象类和抽象方法的理解,并掌握如何在实际编码中实现类的继承以及多态性。 首先,让我们理解抽象类和抽象...
C#第六章 初始继承和多态.pdfC#第六章 初始继承和多态.pdfC#第六章 初始继承和多态.pdf C#第六章 初始继承和多态.pdfC#第六章 初始继承和多态.pdf
继承与多态 继承是面向对象编程(Object-Oriented Programming)中的一种机制,允许一个类继承另一个类的属性和行为。通过继承,子类可以重用父类的代码,减少代码的冗余和重复。同时,继承也可以实现多态性,即...
java 实验 继承与多态rectAngle 定义矩形类,用户输入矩形的长与宽,程序计算其面积和周长;派生子类正方形类,定义一个接口Printable源代码
Java 中继承与多态的题目 本资源摘要信息是关于 Java 中继承和多态的题目,涵盖了面向对象编程的基本概念和继承机制的应用。 继承的概念 继承是面向对象编程的一种机制,允许一个类(子类)继承另一个类(父类)...
【C语言实现继承与多态】的探讨主要集中在如何在非面向对象的语言——C语言中,利用其特性模拟实现面向对象编程的关键概念:封装、继承和多态。 封装是面向对象设计的基础,它通过将数据和操作数据的函数捆绑在一起...
### Java继承与多态知识点详解 #### 一、引言 在面向对象编程语言中,继承和多态是非常重要的概念。它们提供了强大的机制来管理代码的复杂性,并且能够有效地复用现有代码。本文将详细介绍Java中的继承和多态概念...
【继承与多态】 继承是面向对象编程中的一个重要特性,允许一个类(子类)从另一个类(父类)继承属性和方法。这样,子类不仅具有父类的所有非私有属性和方法,还能添加自己的特性和功能。在Java中,继承使用`...
Educoder题目:Java面向对象 - 封装、继承和多态答案解析
Educoder题目:Java面向对象 - 封装、继承和多态的综合练习答案解析
继承是 Java 中的一种机制,允许一个类继承另一个类的属性和方法。继承的语法是使用 `extends` 关键字,例如 `public class Child extends Parent`。在 Java 中,只支持单一继承,也就是说一个类只能有一个直接父类...
标题中的"CPP.rar_多态 .cpp_继承与多态_继承与多态C++"表明这个压缩包文件包含了关于C++编程语言中多态性(Polymorphism)和继承(Inheritance)的概念示例。多态性和继承是面向对象编程(Object-Oriented ...
### 第十一章 继承与多态 #### 1. 概述 在面向对象编程中,继承和多态是两个非常重要的概念。本章节主要介绍C++中的这两个概念及其应用。 #### 2. 基础概念 ##### 2.1 类与对象 面向对象编程的核心是类和对象的...
静态方法不接收`self`参数,与特定的类实例无关,通常用于执行与类相关的辅助任务,但不需要访问类的状态。你可以使用`@staticmethod`装饰器来声明一个静态方法。类方法则接收一个`cls`参数,代表类本身,而非实例,...
java封装 继承与多态 程序设计 类与对象
Java(继承与多态)
### 继承与多态知识点详解 #### 一、面向对象程序设计的三大特性 面向对象编程语言(Object-Oriented Programming, OOP)的核心特性包括封装性、继承性和多态性。 1. **封装性(Encapsulation)** - **定义**:...