public class Person {
public static void main(String[] args) {
new Object() {
public void test() {
System.out.println("尚硅谷");
}
}.test();
Pa a = new Pa();
//1.通过创建实现类的实例然后调用方法
a.methodA();
//2.提供接口匿名实现类的对象调用方法,并没有创建类,
// 而是对接口内的方法直接重写
A a1 = new A() {
@Override
public void methodA() {
System.out.println("接口匿名实现类的对象调用方法," +
"我并没有创建有名的类,我是匿名的类!");
}
};
a1.methodA();
//3.提供接口匿名实现类的匿名对象
new A() {
@Override
public void methodA() {
System.out.println("我是提供接口匿名实现类的匿名对象," +
"没有创建实现类的名称,也没有创建对象名!");
System.out.println("我在结束时直接调用了methodA()哦," +
"注意啦!!!");
}
}.methodA();
//1.正常情况下的有对象名,有类名的抽象类方法的重写以及调用
Pb b = new Pb();
b.methodB();
//2.提供有对象名的匿名子类的对象
B b1 = new B() {
@Override
public void methodB() {
System.out.println("我是抽象方法的重写," +
"首先我有对象名,其次我的继承子类是匿名的,看不到的哦");
}
};
b1.methodB();//通过对象名进行调用
//3.提供匿名子类的匿名对象
new B(){
@Override
public void methodB() {
System.out.println("我是提供继承匿名子类的匿名对象," +
"没有创建子类的名称," +
"也没有创建对象名!");
System.out.println("我在结束时直接调用了methodB()" +
"哦,注意啦!!!");
}
}.methodB();
}
}
interface A {//接口A
public abstract void methodA();
}
class Pa implements A {//接口A的实现类
@Override
public void methodA() {
System.out.println("我是有对象名,有实现类名" +
"的重写methodA,注意,是对接口A的实现");
}
}
abstract class B {//抽象类B
public abstract void methodB();
}
class Pb extends B {
@Override
public void methodB() {//继承抽象类的方法重写
System.out.println("我是有名有类的抽象类的方法重写");
}
}
注意区分:接口时:
1.既有实现类又有对象名
2.匿名实现类的对象,
3.匿名实现类的匿名对象--------------->一般常用这个
抽象类时:
1.既有继承子类又有对象名
2.匿名继承子类的对象,
3.匿名继承子类的匿名对象--------------->一般常用这个