定义:没有显示名字的内部类
在没有实现内部类之前,我们要实现方法示例:
/**
*定义抽象类
*/
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);
}
}
返回结果如下所示: