public class 子类 extends 父类 {}
什么时候使用继承:
- 继承体现的关系:is a
- 假设法:我有两个类,如果其中一个类是另外一个类的一种就可以使用继承。否则不可滥用继承
- eg:苹果和水果(对),猫和动物(对),猫和狗(错)
- 子类的方法中访问一个变量
- 首先在子类的方法中寻找
- 其次在子类的成员变量中寻找
- 最后在父类的成员变量里寻找
- 如果没有就会报错
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 :静态,可以修饰成员方法,成员变量
- 被类的所有对象所共享
- 可以通过类名或对象调用,我们推荐通过类名调用
- 访问特点:
- 非静态的成员方法可以访问静态或者非静态的成员变量或成员方法
- 静态的成员方法只可以访问静态的成员方法和成员变量,不可以访问非静态的
- 静态的成员方法只可以访问静态的



