java继承
1.继承
(1)什么时候使用继承
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,
那么多个类无需再定义这些属性和行为,只要继承那个类即可。
(2)如何实现继承
通过extends关键字可以实现类与类的继承
public class PhpTeacher extends Teacher {}
(3)继承的好处,缺点
提高了代码的复用性
提高了代码的维护性
让类与类之间产生了关系,是多态的前提
(4)继承特点:单继承 多层次
(5)继承的注意事项
a.继承中类之间体现的是:”is a”的关系。(……是……的一种)
学生是人类的一种
b.不要为了部分功能而去继承
c.子类继承父类,子类只能继承父类非私有的成员变量和成员方法
d.构造方法不能被继承,只能被调用!子类中所有的构造方法默认都会访问父类中无参构造方法
e.子类中存在与父类同名的成员变量
e1:在子类方法中访问一个变量
首先在子类局部范围找
然后在子类成员范围找
最后在父类成员范围找(肯定不能访问到父类局部范围)
如果还是没有就报错。(不考虑父亲的父亲…)
f.super(…)或者this(….)必须出现在第一条语句上
g:子类不能继承父类的构造方法,但是可以通过super(后面讲)关键字去访问父类构造方法。
(6) 方法重写
定义:在子类中,有与父类完全相同(返回值类型 方法名 参数)的方法!
应用:
当子类需要父类的功能,而功能主体子类有自己特有内容时,
可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容,
最终使用的是子类自己的
注意:方法重写,子类的权限修饰符必须大于等于父类权限修饰符
(7)面试题:
1.方法重写(覆盖,复写)和方法重载的区别?方法重载能改变返回值类型吗?
方法重载(Overload
):在本类中,有两个或两个以上的方法,
方法名相同,参数列表(顺序,数量,类型)不同.
方法重写(
Override):在子类中,有与父类完全相同的方法,那么就说子类重写父类的方法
不能以返回值类型区分重载,可以改变返回值类型
2.
this关键字和super关键字分别代表什么?以及他们各自的使用场景和作用。
this代表自身引用 super代表父类引用
this用在本类中 super用在子类中
调用构造方法:this(参数) super(参数)
调用实例方法:this.方法名() super.方法名()
调用成员变量:this.属性 super.属性
this应用场景:封装(在本类中区分形参和私有属性)
super应用场景:继承(在子类中调用父类非私有成员)
2.final修饰符
修饰类,修饰成员方法,修饰成员变量
final修饰的类不能被继承
final修饰的方法不能被重写
final修饰的变量是常量(一旦赋值,不能被改变)
面试题:final,finally,finalize区别
final:在方法声明上,分别演示基本类型和引用类型作为参数的情况
基本类型,是值不能被改变
引用类型,是地址值不能被改变,但是该对象的堆内存的值是可以改变的
补充:方法互相调用
同一个类中:方法名()
不同类中:创建对象 对象名.方法名()