Java笔试易错点记录
Java笔试易错点记录
# 1.子类构造方法如何调用
使用示例:
public class Base {
public Base(String s){
System.out.println("B");
}
}
1
2
3
4
5
2
3
4
5
public class Derived extends Base{
public Derived(String s){
System.out.println("D");
}
public static void main(String[] args) {
new Derived("C");
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
输出结果:
public Derived(String s){
System.out.println("D");
}
上面代码编译报错
1
2
3
4
2
3
4
改成如下代码即可输出BD(或者个base类加一个无参构造函数也行):
public Derived(String s){
super(s);
System.out.println("D");
}
1
2
3
4
2
3
4
原因分析:
在java中规定:一个父类可以有多个子类,但是一个子类只能有一个父类。子类可以通过extends关键字来继承父类。 通过继承,子类可以得到父类除构造函数以外所有的成员(包括成员变量和成员函数),但是要注意得到并不等于可以随便使用。 在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句,它是用来访问父类中的空参数构造方法,进行父类成员的初始化操作 this()是调用本类的构造方法,super()是调用父类的构造方法,且两条语句不能同时存在 无论如何,子类的所有构造方法,直接或间接必须调用到父类构造方法;子类的构造方法什么都不写,默认的构造方法第一行super()
# 2.子父类调用
使用示例:
public class Base {
public Base(){
foo();
}
private void foo() {
System.out.println("base");
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
public class Derived extends Base{
public void foo(String s){
System.out.println("Derived");
}
public static void main(String[] args) {
new Derived();
new Base();
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
输出结果是:
base base
1
上次更新: 2024/02/03, 13:17:04