JavaSE进阶继承与修饰符

JavaSE进阶

今日内容:继承,修饰符:权限修饰符、静态修饰符static、最终修饰符final

继承

概述:继承是面向对象的三大特征(封装,继承和多态)之一

Java中的继承描述的是子父类的关系,子类可以拥有父类中可继承的成员,同时子类也可以有自己特有的成员

注:1、构造方法不能被继承 2、私有成员不能被继承

格式:

public class 子类 extends 父类{
    
}

注:1、父类一定要先定义好,在定义子类的同时使用继承的格式

​ 2、子类:也可以称为派生类

​ 3、父类:也可以称为基类或者超类

继承的使用场景

继承的由来:多个类有共性的成员,可以将共性的内容不断向上抽取,抽取到另一个类中,其他的类就继承这个类。抽取出来的这个类就是父类,从而简化了代码

继承的好处和弊端

好处:1、可以提高代码的复用性 2、可以提高代码的扩展性 3、是多态的前提之一

弊端:让类与类之间的关系变得紧密(耦合性增强),让子类不再是独立的个体,有了一些约束。

注:1、Java中的类只支持单继承,不支持多继承

​ 2、Java中的类支持多层继承

​ 3、一个类可以被多个类同时继承

​ 4、子类和父类是相对的概念

​ 5、不能乱用Java中的继承,Java中的继承描述的是“is a” 的关系

​ …is a…:表示…是…的一种

继承中成员的特点

成员变量:(就近原则:离谁近就用谁)运行一个类文件中编写多个类,但是要求最多只有一个是public修饰的类,并且public修饰的类与类文件名要相同,学习阶段为了避免多个类来回切换,可能经常使用这种方式,但是开发环境中都建议每一个类都在独立的类文件中定义

构造方法:一定会先执行父类的构造方法,然后再执行子类的构造方法

默认调用父类的空参构造方法,super();在本类中this调用不能形成闭环;

为什么要保证父类的构造方法先执行:保证父类中的成员进行初始化,子类可能会使用到父类的成员变量

调用构造方法的方式:1、使用new关键字调用 2、使用this()或者super()

成员方法:类似于就近原则;首先找本类的成员方法,如果没有,则找父类的成员方法,如果都有,找本类的成员方法,如果都没有,则报错。

this和super

this:表示当前类的对象(的引用),在一个方法中的this,谁来调用this就表示谁

作用:1、调用本类的成员变量 this.成员变量名

​ 区分成员变量和局部变量:只能是成员变量可以使用this进行调用

​ 2、调用本类的成员方法 this.成员方法()

​ 3、调用本类的构造方法 this(参数)

super:表示当前类的父类的那片空间(没有地址值)

作用:1、调用父类的成员变量 super.成员变量名

​ 2、调用父类的成员方法 super.成员方法()

​ 3、调用父类的构造方法 super(参数)

注:1、this()和super()这样的语句只能使用在构造方法中;2、必须位于构造方法的第一行有效代码;3、this()和super()这样的语句不呢同时出现

方法重写Override

概念:方法重写也称为方法复写/方法覆盖

​ 在有子父类关系的两个类中,子类出现了和父类的方法相同的方法,这种现象就是方法重写

Java提供了一个@Override注解可以验证一个方法是否重写的方法

为什么要进行方法重写(方法重写的使用场景):发生方法重写我们一般不会修改方法声明,而是修改方法体内容;如果父类的无法满足子类的需求,则会进行方法重写:1、完全不满足:完全修改方法体内容,和父类方法体内容完全不同

2、不完全满足 :满足的部分会调用父类被重写的方法,不满足的部分再单独修改

3、完全满足(不进行重写,继承下来即可)

1、2两种情况会进行方法重写

方法重写的原则:发生方法重写,一般不会进行修改,而是修改方法体内容,但是要修改方法声明也可;

遵循以下原则:一大两同两小

一大:子类重写方法的权限修饰符要大于等于父类的权限修饰符

​ 权限修饰符:public>protected>默认>private;

​ 如果父类的方法是private权限,私有不能被继承,更不能被重写

两同:方法名必须相同,参数列表必须相同

两小:子类重写方法的返回值类型必须小于等于父类方の法的返回值类型(针对引用类型有效,针对基本类型无效)

子类重写方法的异常必须小于等于|少于等于父类方法所抛的异常,父类方法如果没有抛异常,则子类重写的方法一定不能抛异常

面试题:方法重载(Overload)和方法重写(Override)的区别

方法重载:1、同一个类种,出现了方法名相同,参数列表不同的方法的现象

​ 2、只和方法名和参数列表有关,和其他无关

方法重写:1、有子父类关系的两个类中,子类出现了和父类中方法名相同、参数列表也相同的方法

​ 2、除了和方法名和参数列表有关之外,和其他(权限修饰符、返回值等)有关

修饰符

权限修饰符

是用于控制所修饰内容(类,成员变量、成员方法和构造方法)的访问权限(使用范围)的修饰符

使用范围最小为本类中。

权限修饰符四种:

权限范围从大到小依次为:public protected (默认)default private

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pcnc8YRX-1659680170740)(C:\Users\32237\AppData\Roaming\Typora\typora-user-images\image-20220804161402653.png)]

在不同包的子类对象下,protected只能在子类中创建对象进行调用,不能创建父类对象进行调用。

注:类使用的权限修饰符会影响类中成员的访问权限

最终修饰符final

final关键字,可以修饰类、成员方法和变量

修饰类的特点:该类不能被继承(太监类)

JDK中也提供了一些final修饰类:String、System

修饰的成员方法的特点:该方法不能被重写,但是可以被继承

修饰的变量的特点:修饰的变量变成了常量,不能再次赋值。

类中那些不能被继承:构造方法,private修饰的成员方法

类中那些不能被重写:构造方法,private修饰的成员方法;不能被继承,肯定不能被重写;能被继承,也不一定能被重写。如果是static修饰的方法,也不能被重写

final可以是修饰成员变量,也可以修饰局部变量;修饰完就都变成了常量

常量的命名规范:所有的单词都是英文大写,如果有多个单词组成,则中间使用下划线(_)分隔

可以使用快捷键:大小写之间的切换:ctrl+shift+u;

final修饰的变量既可以是基本类型,也可以是引用类型

如果修饰的是基本类型,表示值不能修改,不能被重新赋值

如果修饰的是引用类型,表示值不能重新赋值;地址值不能被修改,内容可以修改

final修饰成员变量:

1、一般还会和另外两个修饰符一起使用

public static final int NUM=10;

2、赋值时机问题:可以显示赋值;在构造方法运行之前赋值就行

静态修饰符static

static关键字就是静态修饰符,可以修饰成员变量、成员方法和静态代码块

静态修饰的特点:

1、修饰后属于类,不再属于某一个对象,而是该类的所有对象所共享

2、多了一种调用方法,可以通过类名.进行调用,主要用这种方式

3、静态只能调用静态,不能直接调用非静态;

​ 非静态可以调用非静态,也可以调用静态;

静态的内容随着类的加载而存在的,出现时机比较早

非静态的内容加载都是比较晚的

static的使用场景

一般我们不适应static修饰成员变量和成员方法,只有满足以下条件才使用:

static修饰成员变量:1、如果一些成员变量的值对于所有的对象来说是相同的(共享的),那么可以使用static修饰;2、如果希望在静态的内容中,直接使用成员变量,也可以使用static进行修饰。

static修饰成员方法:1、如果是工具类中的方法,都可以使用static进行修饰,可以方便调用。2、如果希望在静态的内容中直接使用成员方法,也可以使用static进行修饰。

类根据作用不同,名称不同,内部的规范不同:

1、测试类:有main方法的类,可以独立运行的;

2、标准类:描述类/javabean类,用于描述现实世界事物的;

3、工具类:工具箱,里面有一些方便和好用的工具方法,用于简化操作。

main方法

public static void main (String[] args){}

public:权限修饰符,使用的是最大权限

static:静态的,随着类的加载而加载,出现的比较早

void:该方法没有返回值

main:方法的名称,固定的名称

(String[] args):参数列表,一个String类型数组,args是参数的名称

工具类

特点:1、构造方法使用private修饰,2、所有的成员方法都是static修饰的

jar包

后缀名为.jar的文件,JAR文件(Java归档)是一种软件包文件格式

:权限修饰符,使用的是最大权限

static:静态的,随着类的加载而加载,出现的比较早

void:该方法没有返回值

main:方法的名称,固定的名称

(String[] args):参数列表,一个String类型数组,args是参数的名称

工具类

特点:1、构造方法使用private修饰,2、所有的成员方法都是static修饰的

jar包

后缀名为.jar的文件,JAR文件(Java归档)是一种软件包文件格式

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值