视频学习地址
前言
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
继承
- extands的意思是“扩展”,子类是父类的扩展
- Java中类只有单继承,没有多继承
- 继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖、组合、聚合等
- 继承关系的两个类,一个为子类(派生类),一个为父类(基类),子类继承父类,使用关键字extends来表示
- 子类和父类之间,从意义上讲应该具有“is a”的关系
- 私有的东西无法被继承
- 被final修饰符修饰的类无法继承
Object类
- 所有的类都默认继承或间接的继承了Object类
Super
public void test(String name){
System.out.println(name); //传参的name
System.out.println(this.name); //这个类中的name
System.out.println(super.name); //父类中的name
}
- super调用父类的构造方法,必须在构造方法的第一行
- super必须只能出现在子类的方法或构造方法中
- super和this不兼容,不能同时调用构造方法
方法重写
- 重写都是方法的重写,和属性无关
- 需要有继承的关系,子类重写父类的方法
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大,但不能缩小,public>protected>default>private
- 抛出的异常:范围可以被缩小,但不能扩大
public class Application {
//静态的方法和非静态方法的区别很大
//静态方法:方法的调用只和左边定义的数据类型有关
//非静态方法:
public static void main(String[] args) {
A a = new A();
a.test(); //调用A的静态方法
//父类的引用指向了子类
B b = new A(); //子类重写了父类的方法
b.test(); //调用B的静态方法
}
}
public class A extends B{
@Override //注解:带功能的注释(意思是重写)
public void test() {
System.out.println("A=>test()");
}
}
public class B {
public void test(){
System.out.println("B=>test()");
}
}
为什么需要重写
- 父类的功能,子类不一定需要,或者不一定满足
总结
重写:子类的方法必须和父类的一致,但方法体不同即是子类重写了父类,如果子类没有父类的方法,则调用父类。