我的问题与以下代码有关。创建Person
类的实例时,方法printName
将被覆盖。
这被认为是好习惯吗?我问这个是因为在android中定义事件监听器时会出现这种语法。
import java.util.Scanner;
public class myJavaProgramme{
public static void main(String[] args){
Person newPerson = new Person(){
@Override
public void printName(){
System.out.println("Method Overriden");
}
};
newPerson.printName();
}
public static Scanner readConsole = new Scanner(System.in);
}
class Person{
public void printName(){
System.out.println(this.name);
}
public void setName(String newName){
this.name = newName;
}
private String name = "someName";
}
答案 0 :(得分:3)
这取决于。 在创建实例时重写方法对于很少被重用的一次性类很方便,例如按钮的监听器类,... 但对于像Person这样的实体类,它的子类将在很多地方使用。最好是正式扩展和定义子类。
答案 1 :(得分:0)
在创建Person类的实例时,类的方法printName是Overriden
更准确地说,创建了Person的匿名子类的实例(其中覆盖了方法printName()
)。您可以通过调用结果对象的getClass()
方法来区分。
我认为这是一种很好的做法,因为在android中定义事件监听器时会出现这种语法
对于某些特定情况,包括特别是事件听众,它是公认的和长期存在的惯例。一般的替代方法是定义一个命名类并实例化它;如果你想在另一个上下文中重用这个类,这是一个更好的方法,但通常不是事件监听器的情况。
在最近的Java中,可以使用lambda代替以前通常由匿名类提供服务的某些情况。我想,当两者之间有选择时,大多数人都喜欢在风格上超过匿名类。