| |
|
开发:
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.finalfinal? 关键字是最终的意思,可以修饰成员方法,成员变量,类 final 修饰的特点:●修饰方法:表明该方法是最终方法,不能被重写。 ●修饰变量:表明该变量是常量,布恩那个再次被赋值。 ●修饰类:表明该类是最终类,不能被继承。 final修饰局部变量:●变量是基本类型:final修饰指的是基本类型的数据值不能发生改变。 ●变量是引用类型:final修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的。 2.staticstatic 关键字是静态的意思,可以修饰成员方法,成员变量。 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 (四)类和接口的关系●类和类的关系 ? ? ? ? ? ? 继承关系,只能单继承,但是可以多层继承 ●类和接口的关系 ? ? ? ? ? ? 实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。 ●接口和接口的关系 ? ? ? ? ? ? 继承关系,可以单继承,也可以多继承 (五)抽象类和接口的区别●成员区别 ? ? ? ? ? ? 抽象类? ? ? ? ? ? ? ? ? ? ? 变量,常量;有构造方法,有抽象方法,也有非抽象方法 ? ? ? ? ? ? 接口? ? ? ? ? ? ? ? ? ? ? ? ? 常量;抽象方法 ●关系区别 ? ? ? ? ? ? ?类与类? ? ? ? ? ? ? ? ? ? ? ?继承,单继承 ? ? ? ? ? ? ?类与接口? ? ? ? ? ? ? ? ? ?实现,可以单实现,也可以多实现 ? ? ? ? ? ? ?接口与接口? ? ? ? ? ? ? ? 继承,单继承,多继承 ●设计理念区别 ? ? ? ? ? ? ?抽象类? ? ? ? ? ? ? ? ? ? ? ? 对类抽象,包括属性,行为 ? ? ? ? ? ? ?接口? ? ? ? ? ? ? ? ? ? ? ? ? ? 对行为抽象,主要是行为 ? ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |