论证接口和抽象类是否真正的直接被new

首先创建接口、抽象类及普通类

接口

public interface Test {
void test();
}

抽象类

public abstract class Test1 {
public void say() {
System.out.println("我是抽象类");
}
}

普通类

public class Test2 {
public void say() {
System.out.println("我是普通类");
System.err.println("对象" + this.getClass());
System.out.println("类名" + this.getClass().getSimpleName());
}
}

主函数执行

public class Main {


public static void main(String[] args) {

new Test() {
public void test() {
System.out.println("我是接口");
System.err.println("对象" + this.getClass());
System.out.println("类名" + this.getClass().getSimpleName());
}
}.test();


new Test1() {
@Override
public void say() {
System.out.println("我是抽象类");
System.err.println("对象" + this.getClass());
System.out.println("类名" + this.getClass().getSimpleName());
}
}.say();

new Test2(){
public void say() {
System.out.println("我是普通类");
System.err.println("对象" + this.getClass());
System.out.println("类名" + this.getClass().getSimpleName());
}
}.say();

Test2 t = new Test2();
t.say();
}
}


/*
运行结果:
我是接口
对象class test00.Main$1
类名


我是抽象类
类名
对象class test00.Main$2


我是普通类
对象class test00.Main$3
类名


我是普通类
对象class test00.Test2
类名Test2
*/




///利用eclipse运行

/*
严格意义上来讲 new还是针对普通类(虽然内部类和普通类有很大的不一样),只不过这个class的写法稍有不同,它是编译器帮我们从匿名内部类
中提取的经过反推:无论是普通类还是抽象类或是接口的匿名类都需要系统所提供带有 "主方法"入口 的类 + "$及编号" 的具体类继承父类或实
现接口因此new的时候是new的jvm所提供的一个具体实现类,而类名则被"空串"所替代
*/


///反推论证///

//利用DOS窗口找到字节码文件


/*
接口匿名类反推
>javap Main$1.class
Compiled from "Main.java"
class test00.Main$1 implements test00.Test {
  test00.Main$1();
  public void test();
}
*/


/*
抽象类匿名类反推
>javap Main$1.class
Compiled from "Main.java"
class test.Main$1 extends test.Test1 {
  test.Main$1();
  public void say();
}
*/


/*
普通类匿名反推
>javap Main$3.class
Compiled from "Main.java"
class test00.Main$3 extends test00.Test2 {
  test00.Main$3();
  public void say();
}
*/


/*
普通类非匿名反推
>javap Test2.class
Compiled from "Test2.java"
public class test00.Test2 {
  public test00.Test2();
  public void say();
}
*/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值