1.extends关键字
class Person{
int name;
int age;
}
class Studetn extends Person{
int score;
}
...
2.继承的限制
- 在Java中只允许单继承
- 子类不能直接访问父类的私有成员
3.子类对象实例化
在子类对象实例化之前,先调用父类中的构造方法,之后调用子类的构造方法,如果多层继承,永远先调用“最老”的类中构造方法
class Father{
Father(){
System.out.println("父类构造方法被调用");
}
}
class Son extends Father{
Son(){
System.out,println("子类构造方法被调用");
}
}
public static void main(String args[]){
Son s = new Son();
//父类构造方法被调用
//子类构造方法被调用
}
4.方法重写
- 在继承中,存在着重写的概念,其实就是子类定义了和父类同名的方法
- 定义:方法名称相同,返回值类型相同,参数相同
class A{
public void tell(){
System.out,println("我是A的tell()方法");
}
}
class B extends A{
public void tell(){//重写
System.out,println("我是B的tell()方法");
}
}
public static void main(String args[]){
B b = new B();
b.tell();//我是B的tell()方法
}
- 重写限制:子类重写的方法不能拥有比父类更加严格的访问权限
- 访问权限:private < default < public
5.super关键字
- 强行调用父类方法的执行
class A{
public void tell(){
System.out,println("我是A的tell()方法");
}
}
class B extends A{
public void tell(){//重写
super.tell();//super关键字调用父类的tell方法
System.out,println("我是B的tell()方法");
}
}
public static void main(String args[]){
B b = new B();
b.tell();
//我是A的tell()方法
//我是B的tell()方法
}
- super不一定在重写中使用,也可以表示那些方法时从父类继承而来的
6.重写与重载的区别
NO | 区别点 | 重载 | 重写 |
---|---|---|---|
1 | 单词 | OverLoading | Overriding |
2 | 定义 | 方法名称相同,参数的类型或个数不同 | 方法名称、参数类型、返回值类型全部相同 |
3 | 权限 | 对权限没有要求 | 被重写的方法不能拥有比父类更加严格的权限 |
4 | 范围 | 发生在一个类中 | 发生在继承中 |