簡體   English   中英

向現有類添加新方法

[英]Add new method to existing class

我知道匿名類,我們可以用它來覆蓋類方法,這是一個例子:

public class User {
    private final  String name;
    public User(final String name){
        this.name=name;
    }
    public void sayHello(){
        System.out.println("Hello : "+name);
    }
    public static void main(String[] args) {
        User s = new User("CHORT"){
        @Override
        public void sayHello(){
            System.out.println("HELLO FROM ANONYMOUS CLASS");
        }
    };

    }
}

但我注意到以下構造也是正確的(我的IDEA未突出顯示)

public class User {
    private final  String name;
    public User(final String name){
        this.name=name;
    }
    public void sayHello(){
        System.out.println("Hello : "+name);
    }
    public static void main(String[] args) {
        User s = new User("CHORT"){

        public void sayHello2(){
            System.out.println("HELLO FROM ANONYMOUS CLASS");
        }
    };

    }
}

但是當我想調用方法sayHello2時,IDEA告訴我它不存在。此構造的目的是什么?

首先,問題的標題是錯誤的。 您沒有“向現有類添加新方法”。 您將方法添加到擴展現有類的匿名類中。

匿名類可以包含常規類所做的任何方法。 它們不必只包含它們擴展的類的方法或它們實現的接口。

因此,在匿名類中定義sayHello2是完全有效的,但是非常無用,因為您不能從匿名類主體外部調用該方法。

另一方面,如果您確實從匿名類主體中調用它(並且可以將其設為private ,因為無論如何都不能從外部調用它),則可能會很有用:

User s = new User("CHORT") {
    @Override
    public void sayHello() {
        sayHello2();
    }
    private void sayHello2() {
        System.out.println("HELLO FROM ANONYMOUS CLASS");
    }
};

編輯:我想過的另一件事-您可能可以使用反射從外部調用您的sayHello2 ,盡管我不確定您為什么要這么做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM