各位大牛,小生初到黑马,今天刚做基础测试题,遇到点困难,还望多指点,小生感激不尽。
/**
* 9:有这样三个类,Person,Student.GoodStudent。其中Student继承了Person,GoodStudent继承了Student,
* 三个类中只有默认的构造函数,用什么样的方法证明在创建Student类的对象的时候是否调用了Person的构造函数,
* 在创建GoodStudent类的对象的时候是否调用了Student构造函数?如果在创建Student对象的时候没有调用Person的构造函数,
* 那么采用什么样的手段可以调用父类的构造函数?
*
如果在创建Student对象的时候没有调用Person的构造函数,
* 那么采用什么样的手段可以调用父类的构造函数?
* 如果确实没有调用父类的构造函数,想必父类的构造函数被private(排除初始化传递参数的不同,请问还有其他的可能吗,知道的请告知,谢谢!!!),单例模式去通过调用父类的static method 来返回被static定义好的对象用,再来操作被private的构造函数.
*
*
*
* */
//这是我写的作业:
class Person{
private static Person p = new Person();
public static Person getInstance(){
return p;
}
private Person(){
System.out.println("调用被private的person空参数构造函数");
}
Person(String args){
p.getInstance();
System.out.println(args+"调用person带一个String参数构造函数");
}
Person(String args,String arg){
p.getInstance();
System.out.println(args+"和"+arg+"调用person带两个String参数构造函数");
}
}
class Student extends Person{
private static Student s = new Student();
public static Student getInstance(){
return s;
}
private Student(){
super("学生");
System.out.println("调用被private的Student空参数构造函数");
}
Student(String args){
super("学生1","学生2");
s.getInstance();
System.out.println(args+"调用Student带一个String参数构造函数");
}
}
class GoodStudent extends Student{
private static GoodStudent gs = new GoodStudent();
public static GoodStudent getInstance(){
return gs;
}
private GoodStudent(){
super("好学生");
System.out.println("调用被private的GoodStudent空参数构造函数");
}
}
public class Test9 {
public static void main(String[] args){
Student s = null;
s.getInstance();
System.out.println("*************************************");
GoodStudent gs = null;
gs.getInstance();
}
}
运行后的结果:
调用被private的person空参数构造函数 //父类person的private构造函数被调用了
学生调用person带一个String参数构造函数
调用被private的Student空参数构造函数 //本类Student的private构造函数被调用了
*************************************
学生1和学生2调用person带两个String参数构造函数 //person类 this.getInstance();为什么没被调用呢?
好学生调用Student带一个String参数构造函数 // 父类Student的this.getInstance();也没有被调用为什么呢?
调用被private的GoodStudent空参数构造函数 //本类GoodStudent的private构造函数被调用了
|