黑马程序员技术交流社区
标题:
面向对象
[打印本页]
作者:
原子弹
时间:
2014-3-26 00:09
标题:
面向对象
有这样三个类,Person,Student,GoodStudent.
GoodStudent继承于Student,Student继承Person.
如何证明创建GoodStudent时是否调用了Person的构造函数?
在GoodStudent中是否能指定调用Student的那个构造函数?
在GoodStudent中是否能指定调用Person的那个构造函数?
求大神指点啊!!!
作者:
630681386@qq.co
时间:
2014-3-26 00:17
在父类的构造函数中输出一句话就好,看创建子类的对象的时候那句话是否会输出来
作者:
tcny
时间:
2014-3-26 00:31
class Person{
String name;
Person(){
System.out.println("Pserson constructor...");
}
}
class Student extends Person{
String id;
Student(){
System.out.println("Student constructor...");
}
}
class GoodStudent extends Student{
String gender;
GoodStudent(){
System.out.println("GoodStudent constructor...");
}
}
public class Test {
public static void main(String[] args) {
GoodStudent gs = new GoodStudent();
/*打印结果如下:
* Pserson constructor...
* Student constructor...
* GoodStudent constructor...
* 说明按Person->Student->GoodStudent顺序调用构造方法
* */
}
}
复制代码
作者:
tcny
时间:
2014-3-26 00:36
class Person{
String name;
Person(){
System.out.println("Pserson constructor...");
}
Person(String name){
this.name = name;
System.out.println("Pserson constructor..."+this.name);
}
}
class Student extends Person{
String id;
Student(){
System.out.println("Student constructor...");
}
Student(String name, String id){
[color=YellowGreen]super(name);//通过这种方式指定,如果指定不带参的构造方法就写super();[/color]
this.id = id;
System.out.println("Student constructor..."+name+ id);
}
}
class GoodStudent extends Student{
String gender;
GoodStudent(){
System.out.println("GoodStudent constructor...");
}
GoodStudent(String name, String id,String gender){
super(name, id);//通过这种方式指定
this.gender = gender;
System.out.println("GoodStudent constructor..."+name + id + gender);
}
}
public class Test {
public static void main(String[] args) {
GoodStudent gs = new GoodStudent("张三", "20140101", "女");
}
}
复制代码
作者:
原子弹
时间:
2014-3-26 01:32
在GoodStudent中是否能指定调用Student的那个构造函数?
能 通过super();
在GoodStudent中是否能指定调用Person的那个构造函数?
这个能 是不是不能 必须通过Student类调用?
作者:
luoyilan222
时间:
2014-3-26 10:22
1, 如何证明创建GoodStudent时是否调用了Person的构造函数?
执行new GoodStudent()会调用默认构造函数
你可以在Person中写一个默认构造函数执行后你看有打印Person()就知道是否调用Person构造函数
public Person(){
System.out.println(“Person()”);
}
2,在GoodStudent中是否能指定调用Student的那个构造函数?(当然可以)
既然是想调用Student的那个构造函数,肯定有类似下面的构造函数
Student(){……}, Student(int age){……}, Student(String name,int age){……}
你只需要GoodStudent(){
Super();//会调用Student(){……},
}
GoodStudent(parameters){
Super(parameters);//会调用Student(int age){……}
}
GoodStudent(parameters1, parameters2){
Super(parameters1, parameters2);//会调用Student(String name,int age){……}
}
3,在GoodStudent中是否能指定调用Person的那个构造函数?
直接在GoodStudent中是不能指定调用Person的那个构造函数
但是可以间接的指定
你可以传一个状态值到Student中,然后再Student中选择掉用Person哪一个构造函数
下面我就不唉排的列举了,和上面的原理是一样的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2