Git-cjh

不要让自己阻止自己过自己想过的生活

导航

匿名内部类和内部类

1.匿名内部类定义格式:new 类名/接口/抽象类(){\n
//继承的方法\n
}

代码实例
第一种:“继承”父类

public class Anonymous {
public static void main(String[] args) {
/*
匿名类是一个表达式,匿名类的语法就类似于调用一个类的构建函数
new Animals(),除些之外,还包含了一个代码块,在代码块中完成类的定义
*/
Animals a = new Animals(){
public void eat(){
System.out.println("匿名内部类");
}
};
a.eat();//调用匿名内部类的方法
}

}

abstract class Animals{
public abstract void eat();
}

输出结果就是:匿名内部类

作用:可以节约一个类代码的定义(也就是直接把子类的代码放入父类中了)

第二种:接口“继承”

同理,接口也可以继承:

interface Animals{
public void eat();

}
把刚刚的Animal类注掉,新建一个接口Animals,匿名内部类内容和上面的一致,完整代码如下:

// Animals.java

public interface Animals {
public void eat();
}

// Anonymous.java

public class Anonymous {
public static void main(String[] args) {
/*
匿名类是一个表达式,匿名类的语法就类似于调用一个类的构建函数
new Animals(),除些之外,还包含了一个代码块,在代码块中完成类的定义
*/
Animals a = new Animals(){
public void eat(){
System.out.println("匿名内部类");
}
};
a.eat();//调用匿名内部类的方法
}

}

本部分引用:https://www.cnblogs.com/dabuliu/p/14457793.html

2.使用注意点
2.1 匿名内部类只能使用一次
2.2 匿名内部类要继承类或实现接口,但二者不可兼得,具体实现形式已在 1 中指出
2.3 匿名内部类不能定义构造函数,因为没命名
2.4 匿名内部类不能有静态变量和方法
2.5 匿名内部类不能是抽象的,因为他自己本身就是用于实现抽象类或接口的
2.6 匿名内部类引用外部类的变量时只能引用类变量、实例变量和final修饰的局部变量

3.作用:简化代码编写

4.应用场景:不想多定义一个类来继承或实现抽象类或接口,且该实现类或子类只使用一次时,可使用匿名内部类来实现

posted on 2023-04-16 23:55  cai--0  阅读(27)  评论(0编辑  收藏  举报