继承
public class 子类 extends 父类 {}
什么时候使用继承:
- 继承体现的关系:
is a
- 假设法:我有两个类,如果其中一个类是另外一个类的一种就可以使用继承。否则不可滥用继承
- eg:苹果和水果(对),猫和动物(对),猫和狗(错)
继承中访问变量的特点
- 子类的方法中访问一个变量
- 首先在子类的方法中寻找
- 其次在子类的成员变量中寻找
- 最后在父类的成员变量里寻找
- 如果没有就会报错
super 关键字
super
关键字和 this
关键字用法类似
this
代表本类对象的引用this
关键字指向调用该方法的对象,一般我们是在当前类中使用this
关键字,所以我们常说this
代表本类对象的引用
super
代表父类对象的引用
关键字 | 访问成员变量 | 访问构造方法 | 访问成员方法 |
---|---|---|---|
this | this.成员变量 | this() | this.成员方法 |
super | super.成员变量 | super() | super.成员方法 |
继承中访问构造函数的特点
子类中所有的构造函数默认都会访问父类中无参的构造方法
为什么呢?
- 因为子类会继承父类中的数据,可能还会使用父类的数据。所以子类初始化之前,一定要先完成父类数据的初始化
- 每一个子类构造方法的第一条语句默认都是:
super()
如果父类中没有无参构造方法,只有带参构造方法,该怎么办么?
- 通过使用
super
关键字去显示的调用父类的带参构造方法 - 在父类中自己提供一个无参构造方法(推荐)
继承中访问成员方法的特点
- 子类对象访问一个方法
- 首先在子类的方法中寻找
- 最后在父类的方法里寻找
- 如果没有就会报错
方法重写
@Override
:
- 是一个注解
- 可以帮助我们检查重写方法的方法声明的正确性
注意事项:
- 私有方法不能被重写(因为父类私有成员子类是不能继承的)
- 子类方法访问权限不能更低(
public > 默认 > 私有
)
导包
使用不同包下的类时,使用的时候要写类的全路径,写起来太麻烦。为了简化带包的操作,Java
就提供了导包的功能
import 包名
权限修饰符
修饰符 | 同一个类中 | 同一个包中子类或者无关类 | 不同包的子类 | 不同包的无关类 |
---|---|---|---|---|
private | √ | |||
默认 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
状态修饰符
-
final
:最终状态,可以修饰成员变量,成员方法,类,变量。- 被其修饰的成员变量,不可以被再次修改赋值
- 被其修饰的成员方法,不能被重写
- 被其修饰的类,不能被继承
- 修饰的变量是基本类型,其数据值不能被改变
- 修饰的变量是引用类型,其地址值不能改变,但地址里面的变量是可以改变的
-
staic
:静态,可以修饰成员方法,成员变量- 被类的所有对象所共享
- 可以通过类名或对象调用,我们推荐通过类名调用
- 访问特点:
- 非静态的成员方法可以访问静态或者非静态的成员变量或成员方法
- 静态的成员方法只可以访问静态的成员方法和成员变量,不可以访问非静态的
- 静态的成员方法只可以访问静态的