众所周知:在生活中儿子继承父母留下来的东西,或者在小说中徒弟继承师傅留下来的功夫或者法宝,那么在Java语言中,也有继承语言,即一个类继承另一个类里的变量
-
继承的概念
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。 -
继承格式
在子类面前加入extend父类名{}class 子类名 extend 父类名{}
继承虽然可以很方便的用一个类来写其他类的重复项,提高了代码的复用性和维护性,而且让类之间产生联系,但是增加了代码的耦合性。开发的原则就是高内聚低耦合。
-
继承特点
1.类只能继承父类所有非私有的成员(成员方法和成员变量)
2.子类不能继承父类的构造方法,但是可以通过super(待会儿讲)关键字去访问父类构造方法。
3.不要为了部分功能而去继承
他体现的是一种“is a”的关系; -
继承中的成员变量关系(成员方法类似)
1.子类中的成员变量和父类中的成员变量名称不一样
2.子类中的成员变量和父类中的成员变量名称一样
在子类中访问一个变量的查找顺序(“就近原则”)
a: 在子类的方法的局部范围找,有就使用
b: 在子类的成员范围找,有就使用
c: 在父类的成员范围找,有就使用
d:如果还找不到,就报错 -
super介绍
子类局部范围访问父类成员变量
就和this类似,this引用的是本类对象,super引用的是父类的对象
super.成员变量/成员方法名,super(参数)访问父类有参构造。
super()访问父类无参构造。
其中每一个子类的构造方法中第一条都是super()访问父类空参构造方法。
父类如果没有无参构造方法怎么办呢?
第一种办法就是给父类加入一个无参构造
第二种就是通过super(参数)来访问父类中的有参构造
第三种就是通过this去调用本类的其他构造方法,但是被调用的构造方法必须首先访问了父类的构造 -
方法重写概述
方法重写定义:
子类中出现了和父类中一摸一样的方法声明(方法名,参数列表,返回值类型)。
Override:关键字可以检测本方法是不是覆盖了父类中的方法。
当子类中需要父类的功能,而功能主题子类有自己特有的内容时,可以重写父类中的方法。
举个例子看这个代码
运行结果是:
所以可以看到这个call方法被重写了,输出的结果加入了播放天气预报。
但是其中注意
1.父类中私有的方法不能被重写。因为私有根本就无法被继承
2.子类重写方法时,访问权限不能更低。
3.如果父类用了静态static,子类也必须加上static
- final关键字
final是我们不想让他方法重写的时候写出的关键字,用了final,方法就无法被重写。
final修饰 | 结果 |
---|---|
修饰类 | 被修饰的类不能被继承 |
修饰方法 | 被修饰的方法不能被重写 |
修饰变量 | 这就变成了一个常量 |
也就是说基本类型,值不能被改变。而引用类型是,地址值不能被改变。