java匿名內部類的理解

定義:沒有顯示名字的內部類

在沒有實現內部類之前,我們要實現方法示例:

/**
*定義抽象類
*/
public abstract class Person {
    
    public abstract void song();
}
package com.example.demo.lambda;

/**
 * @author: mxq
 * @date: 2019/11/17 11 26
 * @desc:
 */
public class Child extends Person {
    @Override
    public void song() {
        System.out.println("I like song sing");
    }

    public static void main(String[] args) {
        Child child = new Child();
        child.song();
    }
}

返回結果:

可以很明顯的看出來,就是如果想實現一個抽象方法,必須定義實現類繼承抽象類實現抽象方法;下面我們看如果引入了匿名內部類;

package com.example.demo.lambda;

/**
 * @author: mxq
 * @date: 2019/11/17 11 29
 * @desc:
 */
//抽象類
abstract class Person{
    abstract void song();
}

public class Test {

    public static void main(String[] args) {
        Person person = new Person() {
            @Override
            void song() {
                System.out.println("I like song sing");
            }
        };
        person.song();
    }

}
返回結果

 

總結:爲何叫做匿名內部類,首先因爲通過實現接口生成的實現類沒有名字且是一個內部類;

使用時的注意事項:特別強調一點就是,實現匿名內部類,因爲沒有實現類,所以不能定義實現類的構造方法,但是可以通過在抽象類時定義初始化方法實現;

例如下所示:

package com.example.demo.lambda;

/**
 * @author: mxq
 * @date: 2019/11/17 11 29
 * @desc:
 */
//抽象類
abstract class Person{
    private String name;
    abstract void song();
    public Person() {
    }
    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

}

public class Test {

    public static void main(String[] args) {
        Person person = new Person("小明") {
            @Override
            void song() {
                System.out.println("I like song sing");
            }
        };
        person.song();
        String name = person.getName();
        System.out.println("name="+name);
    }

}

返回結果如下所示:

發佈了59 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章