赞
踩
Java中提供了一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系
public class Student extends Person{}
Student在这称为子类,Person在这称为父类
使用继承的好处 / 优势:
可以把多个子类中重复的代码提取到父类中,提高了代码的复用性
子类可以得到父类的属性和行为,子类可以使用
子类可以在父类的基础上,增加了其他的功能,使子类更强大
继承的特点:
1.Java只支持单继承,不支持多继承,但是可以多层继承
单继承: 一个子类只能继承一个父类
不支持多继承: 子类不能同时继承多个父类
多层继承: 子类A继承父类B,父类B可以继承父类C
儿子->父亲->爷爷->???(Object)
儿子与爷爷属于 间接继承的关系, 也就是 儿子可以使用爷爷的内容
在Java底层中,在最顶层的父类设立了一个虚方法表,在这个虚方法表里面存放了经常被调用的方法(存放在虚方法表中的虚方法需要满足三个条件:非private,非static,非final)
- public class Test {
- public static void main(String[] args) {
- A a = new A();
- a.方法c();
例如:
A->B->C 在这个继承关系中 C的虚方法表被B继承,B的虚方法表被A继承,如果A去使用C的虚方法,并不是一层一层往上找(从性能的角度来说,这样的效率太低),而是在A已经继承的虚方法表中去找,但是如果C的方法并不是虚方法,那A去调用C的方法,那就是一层一层往上找
2.Object: Java中每一个类都直接或者间接继承与Object
3.子类只能访问父类中非私有的成员
总结: 1.Java只能单继承,Java不支持多继承,但是支持多层继承
2.Java中所有的类都直接或者间接继承于Object
3.子类只能访问父类中非私有的成员
什么时候使用继承?
当类与类之间,存在相同或者共性的内容的时候,并且满足子类是父类中的一种,就可以考虑去使用继承来优化代码(公共部分放在父类),减少代码的冗余,提高代码复用性.
子类到底能继承父类中的那些内容? 继承 != 子类能调用
构造方法: 不能被子类继承,但是能通过super去调用
成员变量: public能被子类继承且能调用,private能被子类继承,但是不能被子类去调用
成员方法: public能(虚方法) private不能
this, super 是什么?
this 可以理解是一个变量,表示当前方法调用者的地址值
super 代表父类存储空间
继承中体系中:成员变量/方法 访问特点:
this调用 就近原则
super调用 直接找父类
先在局部位置找,本类成员位置找,父类成员位置找,逐级往上
如果出现了重名的成员变量怎么办?
- System.out.println(name); //从局部位置开始往上找
- System.out.println(this.name); //从本类成员位置开始往上找
- System.out.println(super.name); //从父类成员位置开始往上找
直接调用满足就近原则: 谁理我近 就调用谁
继承中体系中:构造方法的访问特点
父类中的构造方法不会被子类继承,但是能通过super调用
子类的所有构造方法默认先访问父类的无参构造,再执行自己
(因为子类在初始化的时候,有可能会使用父类的数据,如果父类没有初始化,子类就没办法使用父类的数据,也就是子类初始化之前,就一定会调用父类的构造方法去完成父类数据空间的初始化)
子类构造的第一行,有一个默认的super();
如果想要访问父类有参构造,必须自己手写
重写
在继承体系中,子类出现了和父类一模一样的方法声明,我们就称子类这个方法是重写的方法.
方法的重写:
当父类的方法不满足子类现在的需求时,需要进行方法的重写
@Override重写注解
1.@Override是放在重写后的方法上,我们可以用这个注解去校验子类重写时语法是否正确
2.加上这个注解之后,如果有红色波浪线,表示语法是错误的
3.建议在重写的方法写上这个注解(可读性更高)
方法重写的本质就是覆盖了继承类中虚方法表的方法
方法重写注意事项和要求
1.重写方法的名称,形参列表必须和父类一致(错一个字都不行)
2.子类重写父类方法时,访问权限子类必须大于父类 (空着不写 < protected < public)
3.子类重写父类方法时,返回值类型子类必须小于等于父类
4.对于2和3理解可能有些困难的话,有个小建议就是,重写的时候方法和父类保持一致就可以了
5.只有被添加到虚方法表中的方法才能被重写(虚方法原则:非private 非static 非final)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。