package chap14;interface Null{
}
class Person{
public String first;
public Person(){
System.out.println("Pserson **");
}
public Person(String first){
System.out.println("Person");
this.first=first;
System.out.println(first);
}
}public class NullPerson extends Person implements Null {
public static Person NULL=new NullPerson();
private NullPerson() {
super("First");
System.out.println("NullPerson");
}
public String toString(){return "Null Person";}
public static void main(String[] args) {
}}
// 结果:
Person
First
NullPersonpublic static Person NULL=new NullPerson();
从结果看,子类NullPerson 直接进了子类无参构造,然后进父类构造(反常),按常理应先进父类无参构造啊?
按理还应该报空指针异常?下面是原文代码,上面是我作的修改,对原文“通常,空对象是单例,因此这里将其作为静态final实例创建
,这可以正常工作”(Java 编程思想,p599,空对象) .对这句话很疑惑。
原先代码:
import net.mindview.util.*;class Person {
public final String first;
public final String last;
public final String address;
// etc.
public Person(String first, String last, String address){
this.first = first;
this.last = last;
this.address = address;
}
public String toString() {
return "Person: " + first + " " + last + " " + address;
}
public static class NullPerson
extends Person implements Null {
private NullPerson() { super("None", "None", "None"); }
public String toString() { return "NullPerson"; }
}
public static final Person NULL = new NullPerson();
} ///:~*/
}
class Person{
public String first;
public Person(){
System.out.println("Pserson **");
}
public Person(String first){
System.out.println("Person");
this.first=first;
System.out.println(first);
}
}public class NullPerson extends Person implements Null {
public static Person NULL=new NullPerson();
private NullPerson() {
super("First");
System.out.println("NullPerson");
}
public String toString(){return "Null Person";}
public static void main(String[] args) {
}}
// 结果:
Person
First
NullPersonpublic static Person NULL=new NullPerson();
从结果看,子类NullPerson 直接进了子类无参构造,然后进父类构造(反常),按常理应先进父类无参构造啊?
按理还应该报空指针异常?下面是原文代码,上面是我作的修改,对原文“通常,空对象是单例,因此这里将其作为静态final实例创建
,这可以正常工作”(Java 编程思想,p599,空对象) .对这句话很疑惑。
原先代码:
import net.mindview.util.*;class Person {
public final String first;
public final String last;
public final String address;
// etc.
public Person(String first, String last, String address){
this.first = first;
this.last = last;
this.address = address;
}
public String toString() {
return "Person: " + first + " " + last + " " + address;
}
public static class NullPerson
extends Person implements Null {
private NullPerson() { super("None", "None", "None"); }
public String toString() { return "NullPerson"; }
}
public static final Person NULL = new NullPerson();
} ///:~*/
按理还应该报空指针异常?1. 你子类无参构造第一句就是调用父类有有参构造,怎么会进父类无参构造呢?2. 不知道按什么理,哪里应该报空指针?
First
这难道不是从父类无参构造输出的!
super("First");
System.out.println("NullPerson");
}
子类NullPerson有显示调用父类的有参构造方法,
public Person(String first){
System.out.println("Person");
this.first=first;
System.out.println(first);
}
public static Person NULL=new NullPerson();
从结果看,子类NullPerson 直接进了子类无参构造,然后进父类构造(反常),按常理应先进父类无参构造啊?
按理还应该报空指针异常?1.执行
public static Person NULL=new NullPerson();
当然是先进入子类的构造函数了
你子类的构造函数里,又调用了父类带参数的构造函数
super("First");这时候,执行
public Person(String first){
System.out.println("Person");
this.first=first;
System.out.println(first);
}然后通过打印可以看到结果,没有什莫问题啊2.楼主说 按理还应该报空指针异常?
哪里应该空指针异常阿