最新学习到内部类这一块对匿名内部类有点模糊,写下来是为了加深印像,加强理解。
public class AnonymousCla {
public static void main(String[] args) {
IAnimal iAnimal = new IAnimal() {
@Override
public void shout() {
System.out.println("这就是一个匿名内部类,实现了IAnimal接口的shout方法");
}
};
iAnimal.shout();//可以直接调用.
}
}
interface IAnimal{
void shout();
}
class Tiger implements IAnimal{
@Override
public void shout() {
System.out.println("老虎大声叫");
new Tiger(){
@Override
public void shout() {
System.out.println("这就是一个匿名内部类,重写了Tiger的shout方法");
}
}.shout();//这里也可以直接调用父Tiger的方法.也可以在方法体里 重写Tiger的方法
}
}
class Cat implements IAnimal{
{
Cat cat = new Cat(){
@Override
public void shout() {
System.out.println("也可以放在代码块里,重写了Tiger的shout方法");
}
};
}
@Override
public void shout() {
System.out.println("猫咪");
}
}
总结一下:
1.匿名内部类 可以对接 接口,类, 抽象类。
2.匿名内部类并不是真的没名字,只是有系统自动分配一个名字(用GetClass可以查看)。
3.匿名内部类 如果放在类内部,访问权限和其他内部类一致。
应用场景:当做一个实参传递
public static void main(String[] args) {
Cellphone cellphone = new Cellphone();
cellphone.alarmClock(new IBell() {
@Override
public void ring() {
System.out.println("懒猪起床了");
}
});
cellphone.alarmClock(new IBell() {
@Override
public void ring() {
System.out.println("小伙伴上课了");
}
});
}
}
interface IBell{
void ring();
}
class Cellphone{
public void alarmClock(IBell iBell){
iBell.ring();
}
}