62,612
社区成员
发帖
与我相关
我的任务
分享
class Parent{
private String name;
private int age;
public Parent(String name, int age){
setName(name);
setAge(age);
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
class Child extends Parent{
private String school;
public Child(String name, int age, String school){
//用super关键字显式调用父类构造器
super(name, age);
this.school = school;
}
public void setSchool(String name){
this.school = school;
}
public String getSchool(){
return school;
}
}
public class InheritDemo{
public static void main(String[] args){
Child ch = new Child("zhou", 21, "MIT");
System.out.println("name = " + ch.getName() + "\n" + "age = " + ch.getAge() + "\n" + "school = " + ch.getSchool());
}
}
输出结果:
name = zhou
age = 21
school = MIT
下面是隐式调用父类的构造器:
class SuperClass{
public SuperClass(){
//初始化内容
System.out.println("do something in superclass.....");
}
}
class SubClass extends SuperClass{
public SubClass(){
System.out.println("do something in subclass....");
}
}
public class Inherit{
public static void main(String[] args){
SubClass sc = new SubClass();
}
}
执行结果:
do something in superclass...
do something in subclass....
从输出结果可以看出来,在子类构造器中并没有显式调用父类的构造器,但是父类构造器中的内容仍然被打印出来,说明系统会在执行子类构造器之前,隐式调用父类的构造器。而且父类的构造器总会在子类构造器之前执行.
所以相对来说,3是正确的,1、2是错误的。