一、继承
1.概述:
继承是面向对象的三大特征之一,可以使的子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法
面向对象三大特性:封装性、继承性、多态性
2.格式:
public class 子类名 extends 父类名{}
父类又称为基类和超类
子类又被称为派生类
3.特点:
1.java语言是单继承的,一个类的直接父类只能有唯一的一个
2.java语言可以多级继承
3.一个子类的直接父类是唯一的,但是一个父类可以拥有很多子类
4.注意:
(一)在父子类的继承当中,如果成员变量重名,则创建子类对象时,访问有两种方式:
- 直接通过子类对象访问成员变量: 等号左边是谁,就优先用谁,没有则向上找
- 间接通过成员方法访问成员变量:该方法属于谁,就优先用谁,没有则向上找
(二)java中没有多继承,很好理解,如若现在有两个类Father类和Mather类他们有共同的属性age,有一子类Son如果同时继承这两个父类,那么当调用super来访问age时那么访问的会是哪一个父类中的age呢?java无法判断,所以java中没有多继承,但是可以有多层继承如:C继承B ;B继承A
5.继承的好处和弊端
好处
提高了代码的复用性(多个类相同的成员可以放在同一个类中)
提高了代码的维护性(如果方法代码需要修改,修改一个类即可)
弊端
继承类与类之间产生了关系,增强了类的耦合性,
父类改变时,子类不得不发生改变,降低了子类的独立性
6.继承中变量的访问:
在子类中访问一个变量
step1.在子类局部范围查找
step2.子类成员范围查找
step3.父类成员范围查找
step4.都找不到就报错(这里不考虑父类的父类)
7.super关键字
super关键字的用法和this类似
this:表示当前类的对象
super:表示当前类父类的对象
关键字 | 访问成员变量 | 访问成员方法 | 访问构造方法 |
---|---|---|---|
super | super.成员变量 | super.成员方法(…) | super(…) |
this | this.成员变量 | this.成员方法(…) | this(…) |
8.继承中构造方法的访问特点
1.子类中所有的构造都会默认先调用父类的无参构造,为什么?
1️⃣ 因为子类会继承父类中的数据,可能还会使用父类中的数据,所以子类初始化之前,一定先初始化父类
2️⃣ 每个子类构造方法中默认第一条语句都是super();
2.如果父类中没有无参构造,只有有参构造,怎么办?
(1)通过super关键字调用父类有参构造
(2)在父类中手动添加无参构造
9.继承中方法的访问特点
通过子类访问一个方法时
先在子类成员范围查找,若没找到则到父类成员范围查找
二、方法重写
1.概述:
子类中出现和父类中一模一样的方法声明
注意:
-
(1)必须保证父子类之间方法的名称相同,参数列表也相同
- @override:注解写在方法前面,用来检测是不是存放的正确覆盖重写;这个注解就算不写,只要满足要求,也是正确的覆盖重写
-
(2)子类方法的返回值必须【小于等于】父类构造方法的返回值范围
-
(3) 子类方法的权限必须【大于等于】父类方法的权限修饰符
- public >protected >default >private(注意default不是关键字,而是留空什么都不写)
三、权限修饰符
-
public
-使用public修饰的类、方法、变量,在同一个类中、同一个包中、不同包中的子类、不同包中的非子类均可访问 -
protected
- 使用protected修饰的类、方法、变量,仅在同一个类中、同一个包中、不同包中的子类、中可访问 -
private
- 使用private修饰的方法、变量,仅在同一个类中可访问 -
default
- 使用default修饰的类、方法、变量,仅在同一个类中、同一个包中可访问
四、状态修饰符final&static
(一)final(最终态):
可以修饰成员变量,成员方法,类
(1)特点:
修饰变量:该变量的值,不能被修改,必须初始化(手动赋值)
修饰方法:该方法,不能被重写
修饰类:该类,不能被继承
(2)注意
-
1.final修饰不能被修改重写继承
-
2.修饰引用数据类型时,地址值不能改变而地址所标识空间中的内容可以改变;
final修饰基本类型时,变量当中的数据不可改变
-
3.一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写
-
4.当一个方法用final修饰时,那么这个方法就是最终方法,不能被覆盖重写
-
5.对于类、方法来说,abstract和final关键字不能同时使用,因为矛盾
-
6.由于成员变量具有默认值,用final修饰后必须要初始化(手动赋值),不会再给默认值的
-
7.final修饰的成员变量,要么使用直接赋值,要么通过构造方法赋值,二者选其一
(二)static(静态):
可以修饰成员变量,成员方法
特点:
被类的所有对象共享
也是判断是否使用static的条件
修饰的成员变量,成员方法可以通过类名直接调用
注意:
静态成员方法只能访问static修饰成员变量和成员方法,
因为static修饰的成员是在类加载时加载。
(一)静态方法的调用:一般用类名.方法名,也可以用对象名.方法名
Java中工具类里面的工具方法一般都用static修饰,作为静态方法。(二) JAVA中静态方法总结:
1.静态方法可以直接调用同类中的静态成员,但是不能直接调用非静态成员。
因为:静态成员在对象创建之前就要写入内存,而非静态成员还不存在内存中。
2.在普通成员方法中,可以直接访问同类的非静态变量和静态变量。
3. 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法(三)静态方法和非静态方法区别:
- 非静态方法既可以访问静态数据成员又可以访问非静态数据成员,而静态方法只能访问静态数据成员;
- 非静态方法既可以访问静态数据方法又可以访问非静态数据方法,而静态方法只能访问静态数据方法。
解析:静态方法和静态数据成员会随着类的定义而分配和装入内存中; 但是,非静态方法和非静态数据成员只有在类的对象创建时才会分配和装入在对象的内存中。
制作不易,给点鼓励!
点赞👍 收藏+关注 一键三联走起!