继承中的覆盖重写-Java

继承关键字

  • public class 子类名称 extends 父类名称{ …….. }

  • 当子类和父类成员相同时,直接通过子类对象访问该成员,等号左边是谁,就有先用谁,没有就向上找

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Fu {
int numFu = 10;
int num = 100;
public void methodFu(){
System.out.println(num);
}
}
public class Zi extends Fu {
int numZi = 20;
int num = 200;
public void methodZi(){
System.out.println(num);
}
}
public class HelloWorld {
public static void main(String[] args) {
Fu fu = new Fu();
Zi zi = new Zi();
System.out.println(zi.num); //200
zi.methodFu();//100
zi.methodZi();//200
}
  • 子类中局部变量、子类变量、父类变量重名时的访问
1
2
3
4
5
6
7
8
9
public class Zi extends Fu {
int num = 200;
public void method(){
int num = 300;
System.out.println(num);//局部变量
System.out.println(this.num);//本类当中
System.out.println(super.num);//访问父类变量
}
}

覆盖重写

  • 父子之间方法名称和参数列表相同

  • @Override:写在方法前面,用来检测是不是有效的重写

  • 子类方法的返回值必须小于等于父类方法的返回值。

    提示:java. lang.Object类是所有类的公共最高父类,java. lang.Strubg类是Object的子类

  • 子类方法的权限必须大于等于父类方法的权限修饰符

    提示:public > protected > (default) > private

1
2
3
4
5
6
7
8
9
10
11
12
public class Fu {
public void method(){
System.out.println("显示号码");
}
}
public class Zi extends Fu {
@Override
public void method() {
super.method();
System.out.println("显示姓名");
}
}

继承中的构造

  • 当父类没有写有参的构造函数时,子类构造方法中会有一个默认隐含的super()调用。
  • 子类构造可以通过super关键字来调用父类重载构造
  • super的父类构造调用必须是子类构造方法中的第一个语句,也不可出现多次
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Fu {
public Fu(int num) {
System.out.println("有参的父类构造");
}
public Fu() {
System.out.println("无参的父类构造");
}
}
public class Zi extends Fu {
public Zi() {
//super();
super(20);
System.out.println("子类构造");
}
}

继承的特点

  • 单继承:一个类的直接父类只能有一个。
  • 多级继承
  • 一个子类的父类是唯一的,但是一个父类可以有多个子类