博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
继承的概述
阅读量:38381 次
发布时间:2022-02-22

本文共 3909 字,大约阅读时间需要 13 分钟。

一、继承

(一)概述

1、让类和类之间产生联系,子父的关系

2、实现继承:使用关键字:extends,含义:继承、增加、扩展

3、父类:被继承的类,别称:根类,基类,超类

4、子类:用于继承的类,别称:派生类

5、格式

class 父类 {}

class 子类 extends 父类 {}

(二)好处和弊端

1、好处

(1)提高了代码的可维护性

(2)提高了代码的复用性

2、弊端

(1)提高了代码的耦合性(耦合度)

(2)耦合度:代码与代码之间的关联的紧密程度

3、开发的原则:高内聚、低耦合、代码复用性高

(三)注意事项

1、私有成员不能被继承

(1)父类当中的私有成员,不能在子类中直接使用

(2)其实在子类对象中,仍然包含父类私有的成员变量,只不过在父类中不能直接访问父类的私

有成员变量

(3)但是set、get方法是一般的成员方法,可以被继承,我们可以通过继承而来的set、get方法操

作子类的成员变量

2、父类中的构造方法不能被继承

原因:从格式上讲,父类构造方法的方法名是父类类名,子类继承下来也无法使用

解决方式:可以通过子类构造访问父类构造,父类构造再去访问父类中私有的成员变量,从而达成

间接访问

3、继承的设计:要符合子类 is a 父类的逻辑。子类是父类的一种

(1)程序员类:姓名、年龄、工号、工资;方法:工作

(2)项目经理类:姓名、年龄、工号、工资、奖金;方法:工作

(3)父类中放的是所有子类的共性,子类中除了继承来的共性,还具有个性

(四)继承的特点

1、Java中支持单继承、多层继承;不支持多继承

(1)单继承:一个子类只能继承一个父类(亲爹)

(2)多层继承:A继承B,B继承C

(3)多继承:一个子类不能同时继承多个父类

2、不支持多继承的原因

假设一个类能够同时继承两个父类的时候,这两个父类中具有相同的方法,如果子类在使用的时

候,就不知道到底使用的是哪一个类的方法

(五)继承中成员变量的关系

1、在子类中,如果没有定义重名的变量,子类就可以直接使用父类中继承来的变量

2、如果子父类中有重名的变量,子类对象就只使用子类成员变量,不会使用父类成员变量

3、当子父类中定义了重名的成员变量时,按照就近原则访问:先从子类中去寻找,如果找不到就

继续寻找父类,父类如果找不到就一直往上找,直到找到Object类,还是找不到就会报错

4、Object类,是官方提供的一个类型,是所有类型的顶层父类,如果随意定义一个类型,没有明

确说明继承哪个类,就默认继承Object类

(六)this和super详解

1、this关键字:指代当前类型当前对象的引用

2、super关键字:指代当前对象父类的引用

(七)this和super总结

1、可以访问的内容

(1)可以访问成员变量

this.变量名

super.变量名

(2)可以访问成员方法

this.方法名

super.方法名

2、this和super都可以访问构造方法

(1)this();访问本类中的其它方法

(2)super();访问父类的指定构造【看参数是否对应】

3、总结:子类访问父类私有成员变量赋值的方式

(1)子类继承父类中私有成员变量对应的set、get方法;通过set、get方法进行赋值取值(间接

性)

(2)子类对象在创建的过程中,调用子类的构造方法,子类自己的构造方法通过super语句访问父

类的构造方法,父类的构造方法再去访问父类私有的成员变量,然后赋值

(八)继承中构造方法的总结

1、要创建子类对象,首先要将父类部分的数据准备好,此时我们使用的手段是通过super语句访问

父类构造,父类构造对成员变量初始化,之后在创建子类对象

2、super或者this语句必须写在构造方法的第一行:

原因:使用子类数据前,首先要将父类部分的数据准备好,super语句是用于给父类数据进行初始

化的代码,如果不写在第一行,就有可能出现要是用父类数据但是还没有上准备好的情况

3、构造方法中,如果没有手动提供任何的this或者super语句,编译的时候系统会自动为我们在构

造方法的第一行默认加上一个空参的super();

4、this语句和super语句可以放在普通方法中吗?不行!因为构造方法需要自动调用,放在普通方

法中就变成了手动调用

(九)继承中成员方法的关系

1、在子父类中,出现了不同名的方法:子类对象调用方法的时候,子类中有就执行子类的方法,

父类中就执行父类中的方法

2、子父类中,出现了同名的方法:子类对象调用方法时,只会执行子类的方法

3、结合2中的现象,我们一般需要在子类中对父类方法体修改的时候,就按照这样的操做进行

4、3中的操作,叫做方法的重写

(1)重写:Override,覆写,覆盖;在子类中使用新的方法体覆盖父类旧的方法体

(2)重载:在同一个类中,方法名称相同,参数列表不同,与返回值类型无关;参数列表不同分

为:个数不同、顺序不同、类型不同

(3)重写:在子父类中,方法名称相同,参数列表相同,与返回值类型有关

(4)注解:@Override。可以专门使用重写的语法规则对一个方法进行检测

5、与返回值类型有关:

(1)重写的方法返回值类型可以保持一致

(2)也可以是:子类方法返回值类型是父类方法返回值类型的子类,关系不能颠倒,更不能是无关类

6、注意事项

(1)重写的方法权限要么不变,要么越来越大

(2)私有方法不能被重写

(3)静态方法不能被重写

二、抽象

(一)抽象方法

1、抽象:抽取相似的、相同的代码部分

2、抽象方法:只有方法的声明,没有方法的实现,额外在方法的声明上加上abstract关键字

(二)抽象类

1、概述:可以定义抽象方法的类

2、定义格式

abstract class 类名 { }

(三)抽象类的特点

1、抽象类和抽象方法都必须使用abstract进行修饰

(1)抽象类:abstract class 类名 {}

(2)抽象方法:public abstract void 方法名(参数列表);

2、抽象类和抽象方法的关系

(1)抽象方法必须放在抽象类中

(2)抽象类中未必都是抽象方法

3、抽象类不能创建对象

4、用途

(1)虽然抽象类不能创建对象,但是抽象类的子类可以创建对象,抽象类可以被继承,子类创建

对象实现抽象方法,调用方法即可

(2)如果子类还是无法实现抽象方法,那么这个类就是一个抽象类,还需要继续往下让子类实现

它;就可以创建对象调用方法

(四)抽象类成员的特点

1、成员变量:可以有,子类最终是一个非抽象类,所以成员变量用于给子类继承

2、构造方法:有

(1)虽然抽象类无法创建对象,但是抽象类需要被子类实现,并且抽象类具有成员变量,成员变量需要赋值

(2)子类可以创建对象,子类构造访问父类构造,父类构造用于赋值

3、成员方法:有

(1)可以是抽象方法,也可以是非抽象方法

(2)非抽象方法子类可以直接继承使用,抽象方法子类需要进行重写

三、代码块

(一)概述

1、使用大括号将一段代码包围起来,根据书写的位置不同,具有不同的名称,不同的作用,以及

不同的执行时机

2、分类

(1)局部代码块

(2)构造代码块

(3)静态代码块

(4)同步代码块【多线程】

(二)局部代码块

1、格式:任意一段代码使用大括号包围起来

2、位置:在方法中

3、作用:限定变量的生命周期

(三)构造代码块

1、格式:任意一段代码使用大括号包围起来

2、位置:类成员位置

3、作用:用于执行所有构造方法中共性的内容,或者给成员变量赋值

4、执行时机:在对象创建的过程中,由JVM自动调用,针对每一个对象有且仅有一次调用机会,

如果仅仅是类加载了,但是没有创建对象,构造代码块是不会执行的

5、赋值顺序:默认初始化 > 显示初始化 > 构造代码块赋值 > 构造方法赋值

(四)静态代码块

1、格式

static {

代码块;

}

2、类成员位置

3、执行特点

(1)随着类的加载而执行

(2)类只加载一次,静态代码块也只执行一次

(3)在最初执行,早于所有对象的相关内容

4、作用

(1)给静态成员变量赋值

(2)用于执行哪些必须在最初执行且执行一次的代码,比如:加载配置文件、加载驱动

四、Date类

1、该类的对象用于表示一个特定的瞬间,毫秒值。

2、构造方法

(1)Date():表示创建对象那一刹那的毫秒值

(2)Date(long date):表示传入毫秒值的时间,是从1970年1月1日0时0分0秒开始计算

3、常用方法

(1)getTime():获取当前时间的毫秒值

(2)setTime(long time):将调用者对象的毫秒值设置为指定值

五、DateFormat类

1、直接打印Date的结果,不方便阅读,我们想要根据自己的需求进行打印,就需用到当前类

2、DateFormat是一个抽象类,无法创建对象,只能让子类去实现它创建对象

3、常用方法

(1)format(Date date):将参数对象,格式化为一定的日期格式

(2)parse(String source):将参数字符串转为Date类型

六、SimpleDateFormat

(一)使用

1、SimpleDateFormat是DateFormat的子类,可以创建对象调用方法

2、构造方法

(1)SimpleDateFormat():使用默认的格式进行打印

(2)SimpleDateFormat(String pattern):使用指定的格式进行打印

转载地址:http://evqcuy.baihongyu.com/

你可能感兴趣的文章
GDB命令大全
查看>>
Android--Error:Library projects cannot enable Jack. Jack is enabled in default config
查看>>
SpringBoot集成WebSocket,实现后台向前端推送信息
查看>>
JS 获取图片、文件数据并封装在json中
查看>>
“秀才造反,十年不成”是什么意思? - 已解决 - 搜搜问问
查看>>
Zookeeper安装使用及JavaAPI使用
查看>>
周海汉:标准模板库stl 容器的线程安全
查看>>
python写的本地搜索小工具
查看>>
編譯android原始碼到模擬器上執行
查看>>
Hadoop C++ Pipes中context常见成员函数的作用
查看>>
Hadoop Streaming 实战: 文件分发与打包
查看>>
Spring4+quartz2集群借助邮箱或是短信实现生日的农历提醒(Quartz实现农历、阴历、公历生日提醒)...
查看>>
防止页面后退(使浏览器后退按钮失效)
查看>>
浅谈CAS在分布式ID生成方案上的应用
查看>>
漫说单例模式--宝宝成长记 你真的了解了吗?
查看>>
Java 序列化和反序列化
查看>>
新人讨论一:事务和两阶段提交
查看>>
HTTP高并发测试
查看>>
群晖如何实现不在同一网段的访问
查看>>
Pytorch框架学习(10)——损失函数
查看>>