比如有三个类,人、教师、学生,教师和学生都属于人,可以理解成二叉树
extends 意为“扩展”,子类是父类的扩展
子类继承父类,在子类的后面加 extends 父类
定义一个 Person 父类,里面写个 say() 方法
再定义一个 Student 子类,加 extends 继承父类
在另一个类的 main 方法里 new 一个子类,调用方法
可以看到子类里没有方法,但因为继承了父类,所以可以调用父类的方法
子类继承了父类,就会拥有父类的全部方法
若父类里属性私有,可以通过 get/set 方式使用
按 ctrl + h,打开一棵树,显示继承关系
在 Java 中,所有的类,都默认直接或间接继承 Object 类
方法里 this 调用当前类里的对象(变量或方法)
子类方法里 super 调用父类里的对象(变量或方法)
每个类里都有隐藏方法,即无参构造器,public Person(){ }、public Student(){ }
1. super 调用父类的构造方法,必须在构造方法的第一个
2. super 必须只能出现在子类的方法或者构造方法中
3. super 和 this 不能同时调用构造方法
super 和 this 的区别:
1.代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的应用
2.前提:
this:没有继承也可以使用
super:只能在继承条件中使用
3.构造方法:
this():本类的构造
super():父类的构造
重写是方法的重写,与属性无关
重写需要有继承关系,子类重写父类的方法
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大但不能缩小
优先级从高到低排序:
public(公共的) > protected(受保护的) > default (默认的)> private(私有的)
即父类可以是 protected(低),重写的子类可以是 public(高),不能反
4.抛出的异常范围可以被缩小,但不能扩大
ClassNotFoundException --> Exception
重写的子类方法和父类必须一致,方法体不同
可以直接在子类里输入方法,idea 自动显示重写
也可以按 alt + insert ,点击 override,也能出现重写
前提是父类有该方法