匿名内部类的前提
必须是一个类或者是一个接口
格式:
new 类名/接口名(){
重写抽象方法
}
传统方法
Animal.java
public abstract class Animal {
public abstract void eat();
}
public class Dog extends Animal{
@Override
public void eat(){
}
}
public class AnimalDemo {
public static void main(String[] args) {
Dog d = new Dog();
d.eat();
}
}
删除掉Dog子类,来使用匿名内部类方法
//整体就等效于Animal父类的子类对象
new Animal(){
@Override
public void eat(){
System.out.println("狗吃肉");
}
}
public static void main(String[] args) {
//整体就等效于Animal父类的子类对象
new Animal(){
@Override
public void eat(){
System.out.println("狗吃肉");
}
}.eat();
}
eat是方法,前面的整体相当于对象调用方法。
Animal a = new Animal() {
@Override
public void eat() {
System.out.println("狗吃肉");
}
};
a.eat();
多态的方式实现匿名内部类
new Inter(){
public abstract void method();
}//相当于实现类
基本方法使用接口的实现类对象
new Inter(){
@Override
public void method() {
System.out.println("1");
}
}.method();
创建匿名内部类充当实现类对象实现以接口为参数方法
public static void main(String[] args) {
function(
new Inter() {
@Override
public void method() {
System.out.println("你好");
}
}
);
}
public static void function(Inter i){//可以通过多态形式给他实现类对象
i.method();
}