匿名内部类
匿名内部类:没有名称的类,主要用来创建对象(只创建一次) 匿名内部类需要通过父类或者接口实现。 语法:
父类名/接口名 对象名 = new 父类名/接口名 {
重写的父类的方法
或
实现的接口中的方法
};
示例1:普通父类
- 父类:
public class A {
public void fun(){
System.out.println("A fun");
}
}
- 测试代码:
public static void main(String[] args) {
class B1 extends A{
}
B1 obj1 = new B1();
obj1.fun();
class B2 extends A{
@Override
public void fun() {//重写父类的方法
System.out.println("B2 fun");
}
}
B2 obj2 = new B2();
obj2.fun();
A obj11 = new A(){
};
obj11.fun();
A obj22 = new A(){
@Override
public void fun() {
System.out.println("22 fun");
}
};
obj22.fun();
new A(){
@Override
public void fun() {
System.out.println("33 fun");
}
}.fun();
}
示例:抽象父类
- 抽象父类:
public abstract class CC {
public void fun() {
System.out.println("fun");
}
public abstract void fun2();
}
- 测试代码:
public static void main(String[] args) {
CC obj = new CC() {
public void fun2() {
System.out.println("xixi");
}
};
obj.fun2();
new CC() {
public void fun2() {
System.out.println("xixi");
}
}.fun2();
}
- 接口:
public interface A {
void fun();
}
- 测试代码:
public static void main(String[] args) {
class B2 implements A {
@Override
public void fun() {//重写父类的方法
System.out.println("B2 fun");
}
}
B2 obj2 = new B2();
obj2.fun();
A obj22 = new A() {
@Override
public void fun() {
System.out.println("22 fun");
}
};
obj22.fun();
new A() {
@Override
public void fun() {
System.out.println("33 fun");
}
}.fun();
}