IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【数据结构】面向对象之继承、多态、抽象类、接口 -> 正文阅读

[数据结构与算法]【数据结构】面向对象之继承、多态、抽象类、接口


一、继承

(一)、继承的概述

继承是面向对象的三大特征之一,可以使得子类具有父类的方法和属性,还可以在子类中重新定义,追加属性和方法。

继承的格式

● 格式:public class 子类名extends父类名{}

●范例:public class Zi extends Fu{}

●Fu:是父类,也被称为基类和超类。

●Zi:是子类,也被称为派生类。

父类:

子类:

当在测试类里面通过子类调用show 方法时报错,因为show方法在父类,此时我们可以通过子类继承父类来调用show方法。继承以后再调用就不会报错了。

继承前:

继承后:

继承中子类的特点:

●子类可以有父类的内容。

●子类还可以有自己特有的内容。

(二)、继承的好处和弊端

继承好处:

●提高了代码 的复用性(多个类相同的成员可以放到同一个类中)。

●提高了代码的维护性(如果方法的代码需要修改,修改一处即可)。

继承弊端:

●继承让类与类之间产生了关系,类的耦合性增强了,当父类变化时,子类也不得不跟着变化,消弱了子类的独立性。

什么时候使用继承?

●继承体现的关系:is a .

●假设法;我有两个类A和B,如果他们满足A是B的一种,或者B是A的一种,就说他们存在继承关系,这个时候就可以考虑用继承来实现,否则不能乱用继承。

●举例:水果和苹果,动物和猫。

(三)、继承中变量的访问特点

?在子类中访问一个变量时:

●子类局部范围找

●子类成员范围找

●父类成员范围找

●如果都没有就报错

(四)、super关键字

super关键字的用法和this关键字的使用方法相似

●this:代表本内对象的引用。

●super:代表父类存储空间的标识(可以理解为父类对象的引用)

?(五)、继承中构造方法的访问特点

子类中所有的构造方法都会默认访问父类中无参的构造方法,为什么呢?

●因为子类会继承父类中的数据,可能还会使用父类中的数据,所以,子类初始化之前,一定要先完成父类数据的初始化

●每一个子类构造方法的第一条语句默认都是:super()

如果父类中没有无参构造方法,只有带参构造方法,该怎么办呢?

●通过使用super关键字去 显示的调用父类的带参构造方法。??

●在父类中自己提供一个无参的构造方法。

(六)、继承中成员访问的特点

通过子类对象访问一个方法:

●先在子类成员范围找

●再父类成员范围找

●如果都没有就报错

(七)、方法重写

方法重写:

●子类中出现了和父类中一摸一样的方法声明

方法重写的应用:

●当子类需要父类的功能,而功能主体子类有自己特有额内容时,可以重写父类中 的方法,这样,既沿袭了父类中的功能,又定义了子类特有的内容。

●@Override可以帮我们检查重写方法的方法声明的准正确性

方法重写注意事项:

●私有方法不能被重写(父类私有的成员(被private修饰)子类是不能继承的)。

●子类 方法访问权限不能更低(publi > 默认 > 私有)

(八)、继承的注意事项

●Java中类只支持单继承,不支持多继承。

●Java中类支持多层继承。

(九)、权限修饰符

1.final

final? 关键字是最终的意思,可以修饰成员方法,成员变量,类

final 修饰的特点:

●修饰方法:表明该方法是最终方法,不能被重写。

●修饰变量:表明该变量是常量,布恩那个再次被赋值。

●修饰类:表明该类是最终类,不能被继承。

final修饰局部变量:

●变量是基本类型:final修饰指的是基本类型的数据值不能发生改变。

●变量是引用类型:final修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的。

2.static

static 关键字是静态的意思,可以修饰成员方法,成员变量。

static修饰的特点:

●被类的所有对象共享

? ? ? ? ? ? ? ?这也是我们判断是否使用静态关键字的条件。

●可以通过类名调用

? ? ? ? ? ? ? ? 当然,也可以通过对象名调用。推荐使用类名调用。

static 访问的特点:

静态的成员方法只能访问静态成员

二、多态

(一)多态的概述

同一个对象,在不同时刻表现出来的不同形态

举例:猫

我们可以说猫是猫:猫cat = new猫()。

我们也可以说猫是动物:动物animal = new 猫()

这里在不同时刻表现出来的不同形态,这就是多态

多态的前提和体现

●有继承/实现关系

●有方法重写

●有父类引用指向子类对象

(二)多态中成员访问特点

●成员变量:编译看左边,执行看左边。

●成员方法:编译看左边,执行看右边。

为什么成员方法和成员变量不一样呢?

●因为成员方法有重写,而成员变量没有

(三)多态的好处和弊端

●多态的好处:提高了程序的扩展性

? ? ? ? ? ? ? ? ? ? 具体体现:定义方法的时候,使用父类型作为参数,将来使用的时候,使用具体的子类形参与操作

●多态的弊端:不能使用子类的特有功能。

(四)多态中的转型

首先给出三个类:

动物类:

猫类:

测试类:

●向上转型:从子到父,父类引用指向子类对象

●向下转型:从父到子,父类引用转为子类对象

三、抽象类

抽象类的概述:

在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。

抽象类的特点:

●抽象类和抽象方法必须使用abstract关键字修饰。

? ? ? ? ?public abstract class 类名{}

? ? ? ? ?public abstract void eat();

●抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。

●抽象类不能实例化

? ? ? ? ? 抽象类如何实例化呢?

? ? ? ? ? ? 参照多态的方式,通过子类对象实例化,这叫抽象类多态。

●抽象类中的子类

? ? ? ? ? ? ? 要么重写抽象类中的所有方法

? ? ? ? ? ? ? 要么是抽象类

抽象类的成员特点:

●成员变量:可以是变量,也可以是常量;

●构造方法:有构造方法,但是不能实例化

? ? ? 那么构造方法的作用是什么呢?

? ? ? ? ? ? ? ?用于子类访问父类数据的初始化

●成员方法:可以有抽象方法,限制子类必须完成某些动作。

? ? ? ? ? ? ? ? ? ? ?也可以有非抽象方法,提高代码的复用性。

四、接口

(一)接口的概述

接口就是一种公共的规范标准,只要符合规范标准,大家都可以使用

Java中的接口更多的体现在对行为的抽象。

(二)接口的特点

●接口用关键字interface修饰

? ? ? ? ? ? public interface 接口名{}

●类实现接口用implements表示

? ? ? ? ? ? public class类名implements 接口名{}

●接口不能实例化

? ? ? ? ? ? ?接口如何实例化呢?

? ? ? ? ? ? ? ? ? ? 参照多态的方式,通过实现类对象实例化,这叫接口多态。

? ? ? ? ? ? ?多态的形式:具体类多态,抽象类多态,接口多态

? ? ? ? ? ? ?多态的前提:有继承或者实现关系,有方法重写,有父(类/接口)引用指向(子/实现)类对象。

●接口的实现类

? ? ? ? ? ? 要么重写接口中的所有抽象方法,要么是抽象类。

(三)接口的成员特点

●成员变量:只能是常量;

? ? ? ? ? ? ? ? ? ? ?默认修饰符:public static final

●构造方法:接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在的。? ? ??

? ? ? ? ? ? ? ? ? ? ?一个类如果没有父类,默认继承Object类

●成员方法:知识抽象的方法

? ? ? ? ? ? ? ? ? ? 默认修饰符:public abstract

(四)类和接口的关系

●类和类的关系

? ? ? ? ? ? 继承关系,只能单继承,但是可以多层继承

●类和接口的关系

? ? ? ? ? ? 实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。

●接口和接口的关系

? ? ? ? ? ? 继承关系,可以单继承,也可以多继承

(五)抽象类和接口的区别

●成员区别

? ? ? ? ? ? 抽象类? ? ? ? ? ? ? ? ? ? ? 变量,常量;有构造方法,有抽象方法,也有非抽象方法

? ? ? ? ? ? 接口? ? ? ? ? ? ? ? ? ? ? ? ? 常量;抽象方法

●关系区别

? ? ? ? ? ? ?类与类? ? ? ? ? ? ? ? ? ? ? ?继承,单继承

? ? ? ? ? ? ?类与接口? ? ? ? ? ? ? ? ? ?实现,可以单实现,也可以多实现

? ? ? ? ? ? ?接口与接口? ? ? ? ? ? ? ? 继承,单继承,多继承

●设计理念区别

? ? ? ? ? ? ?抽象类? ? ? ? ? ? ? ? ? ? ? ? 对类抽象,包括属性,行为

? ? ? ? ? ? ?接口? ? ? ? ? ? ? ? ? ? ? ? ? ? 对行为抽象,主要是行为

? ? ? ?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 17:01:12  更:2021-12-02 17:02:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:35:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码