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();
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();
意思是创建一个Base类的匿名子类实例,而这个子类没有覆盖/实现任何Base类的方法. 并且在调用这个匿名类的默认构造方法的第一条语句时调用Base类的带参构造方法(子类构造方法第一条语句必定是调用父类的构造方法)2. 之所以说不是内部类,是因为class Base不是static的,因此如果是非静态内部类,创建的时候必须用宿主类对象来创建.而这里并没有这样做.3. 内部类的声明是要放在宿主类里面的,这里的Base类声明,显然放在了Text类外.
Base(){ }
Base(String s){ System.out.println(s);}
} 就是一个普通的类,只是里面包含了2个构造函数,一个带参数,一个不带参数
其他,就是new一个对象
哦,就是说创建这个匿名子类对象时,自动选择父类的构造方法,因为构造方法第一句默认只带super(),所以我之前想不通