public class Text {
public static void main(String[] args) { Base b = new Base("123"){ };  }
}class Base{
Base(){ }
Base(String s){ System.out.println(s);}
}输出是: 123问题:    Base b = new Base("123"){ }; 创建的应该是Base子类的一个匿名对象吧,构造方法是不可以继承的,那
          为什么这里可以这样运行? 是直接创建了Base对象吗?就是等于 Base b = new Base();
          

解决方案 »

  1.   

    是匿名类,但不是内部类.1. new Base("123"){ };
      意思是创建一个Base类的匿名子类实例,而这个子类没有覆盖/实现任何Base类的方法. 并且在调用这个匿名类的默认构造方法的第一条语句时调用Base类的带参构造方法(子类构造方法第一条语句必定是调用父类的构造方法)2. 之所以说不是内部类,是因为class Base不是static的,因此如果是非静态内部类,创建的时候必须用宿主类对象来创建.而这里并没有这样做.3. 内部类的声明是要放在宿主类里面的,这里的Base类声明,显然放在了Text类外.
      

  2.   

    class Base{ 
    Base(){ } 
    Base(String s){ System.out.println(s);} 
    } 就是一个普通的类,只是里面包含了2个构造函数,一个带参数,一个不带参数
    其他,就是new一个对象
      

  3.   


    哦,就是说创建这个匿名子类对象时,自动选择父类的构造方法,因为构造方法第一句默认只带super(),所以我之前想不通