在构造类实例时重写方法

时间:2017-09-28 13:44:20

标签: java android

我的问题与以下代码有关。创建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";
}

2 个答案:

答案 0 :(得分:3)

这取决于。 在创建实例时重写方法对于很少被重用的一次性类很方便,例如按钮的监听器类,... 但对于像Person这样的实体类,它的子类将在很多地方使用。最好是正式扩展和定义子类。

答案 1 :(得分:0)

  

在创建Person类的实例时,类的方法printName是Overriden

更准确地说,创建了Person的匿名子类的实例(其中覆盖了方法printName())。您可以通过调用结果对象的getClass()方法来区分。

  

我认为这是一种很好的做法,因为在android中定义事件监听器时会出现这种语法

对于某些特定情况,包括特别是事件听众,它是公认的和长期存在的惯例。一般的替代方法是定义一个命名类并实例化它;如果你想在另一个上下文中重用这个类,这是一个更好的方法,但通常不是事件监听器的情况。

在最近的Java中,可以使用lambda代替以前通常由匿名类提供服务的某些情况。我想,当两者之间有选择时,大多数人都喜欢在风格上超过匿名类。

相关问题