记录:new一个抽象类到底new出了个什么东西

abstract class A {
    abstract void a();
}

A _a = new A() {
  @Override
  public void a() {
  Log.e("wy_","Class对象是: " + this.getClass());
  Log.e("wy_","类名字是: " + this.getClass().getSimpleName());
  }
 };

 _a.a();

//日志输出为:
wy_: Class对象是: class activity.newvideo.molb_808_1078.dst.com.myapplication.MainActivity$1
wy_: 类名字是: 

可以看出是new出来的 A是一个匿名内部类,只是实现了 a()方法,并不是new出了抽象类


//复制一下别人的总结:链接
抽象类不能直接new出来,如果要new出来必须使用匿名类的方式,匿名类其实就是声明了一个新的类来继承抽象类,所以你必须在匿名类实现所有抽象方法。
接口和抽象类类似,只不过里面的方法都是抽象方法,因此匿名类必须实现定义在接口里面的所有方法。
普通的非抽象的类也可以用匿名类new出来,只不过默认不需要实现任何方法,因为普通类里面没有抽象方法,当然你可以Override任何非私有方法。

你可能感兴趣的:(JAVA,java,抽象类)