Amp*_*een 2 java inheritance overriding super
我目前有一个类,让我们称之为Person,使用类似的构造函数.
public class Person
{
private String name;
public Person(String name)
{
this.name = name;
System.out.println("This person is: "+getName());
}
public String getName()
{
return this.name;
}
public void setName(String name)
{
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们使用更具体的Person类继承该类,在本例中为Employee.
public class Employee extends Person
{
private int id;
public Employee(String name, int id)
{
super(name);
this.id = id;
System.out.println("This person is: "+getName()+", identified by #"+getId());
}
public int getId()
{
return this.name;
}
public void setId(int id)
{
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
我想让Employee在创建对象时打印它自己的语句,而是打印来自Person和Employee的print语句.如何覆盖此语句以防止这种情况发生?有没有更好的方法打印到控制台,以防止这种情况发生?
如何覆盖此语句以防止这种情况发生?
除非您可以编辑Person以提供不执行System.out.println调用的构造函数,否则您不能这样做.子类必须调用其中一个超类构造函数.¹您的Person类只有一个包含System.out.println调用的类,因此Employee别无选择,只能调用它.
这是构造函数不应该有副作用的几个原因之一.既不Person也不Employee应该打电话System.out.println.这应该留给使用类或方法(而不是构造函数)的代码.
¹如果不明确地执行此操作,编译器将super()在构造函数的开头插入.在您的情况下,这将是一个编译错误,因为Person没有零参数构造函数.