A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© youtianlong123 中级黑马   /  2014-11-12 16:55  /  2956 人查看  /  22 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

有这样三个类,Person,Student.GoodStudent。其中Student继承了Person,GoodStudent继承了Student,三个类中只有默认的构造函数,用什么样的方法证明在创建Student类的对象的时候是否调用了Person的构造函数,在创建GoodStudent类的对象的时候是否调用了Student构造函数?如果在创建Student对象的时候没有调用Person的构造函数,那么采用什么样的手段可以调用父类的构造函数

22 个回复

倒序浏览
有点拗!!!
回复 使用道具 举报
这个要互相验证    你要证明在创建GoodStudent类的对象时在Student类中的参构造方法中打印一句话,------调用构造方法使用super关键字
回复 使用道具 举报
柳超 发表于 2014-11-12 21:06
这个要互相验证    你要证明在创建GoodStudent类的对象时在Student类中的参构造方法中打印一句话,------调 ...

就是这样子,入学申请时就碰到过这个,最好就是打印语句
回复 使用道具 举报
striker 发表于 2014-11-12 21:14
就是这样子,入学申请时就碰到过这个,最好就是打印语句

就是这样证明的
回复 使用道具 举报
另外    祝你成功
回复 使用道具 举报
我个人觉得最直接的方法就打印一个特殊的字符串来验证
回复 使用道具 举报
cbb 中级黑马 2014-11-12 22:48:17
8#
class Person
{
}
class Student extends Person
{               
}
class GoodStudent extends Student
{
}

class PersonDemoTest
{   
        public static void main(String[] args)
        {   
                System.out.println(new Student().getClass().getSuperclass().getName());//1
                System.out.println(new GoodStudent().getClass().getSuperclass().getName());//2
                Person p=new Student();//向上转型。       
        }
}

楼主有什么好的方法? 求告知 我这估计错了
回复 使用道具 举报
  1. public class Demo {

  2.         public static void main(String[] args) {
  3.                 new GoodStudent();
  4.         }

  5. }
  6. class Person
  7. {
  8.         Person(){
  9.                 System.out.println("person");
  10.         }
  11. }
  12. class Student extends Person
  13. {               
  14.         Student(){
  15.                 System.out.println("student");
  16.         }
  17. }
  18. class GoodStudent extends Student
  19. {
  20.         GoodStudent(){
  21.                 System.out.println("goodstudent");
  22.         }
  23. }
复制代码


回复 使用道具 举报
relice 中级黑马 2014-11-13 01:37:01
10#
/*第一问:
class ExtendsTest
{
        public static void main(String[] args)
        {
                //new GoodStudent();
                new Student();
        }
}
class Person
{
        Person()
        {System.out.println("Person");}
}
class Student extends Person
{
        Student()
        {System.out.println("Student");}
}
class GoodStudent extends Student
{
        GoodStudent()
        {System.out.println("GoodStudent");}
}
*/
//第二问
class ExtendsTest
{
        public static void main(String[] args)
        {
                //new GoodStudent();
                new Student();
        }
}
class Person
{
        Person()
        {System.out.println("Person");}
}
class Student extends Person
{
        Student()
        {
                super();
                System.out.println("Student");
        }
}
回复 使用道具 举报
relice 中级黑马 2014-11-13 02:10:19
11#
//第二问修复下
class ExtendsTest
{
        public static void main(String[] args)
        {
                //new GoodStudent();
                new GoodStudent();
        }
}
class Person
{
        Person()
        {System.out.println("Person");}
}
class Student
{
        ExtendsTest e = new ExtendsTest();
        Student()
        //{System.out.println("Student");}
}
class GoodStudent extends Student
{
        GoodStudent()
        {System.out.println("GoodStudent");}
}
回复 使用道具 举报
DamonZh 来自手机 中级黑马 2014-11-13 08:18:24
12#
楼主都说了只有默认构造方法 还怎么在构造方法中写打印语句呀 亲们
回复 使用道具 举报 1 0
无参的构造函数写出来还能算是默认的构造函数吗?
回复 使用道具 举报
很简单,在需要验证的地方添加一个输出语句就行
比如在Person的构造函数里添加一句System.out.println("Person");
这样在new Student对象的时候,
如果调用了父类指定的构造函数
就会打印出这句话。否则就不会打印。
如果需要显式调用父类构造函数的话
则在子类构造函数第一行写上super();
super()是父类无参构造函数,
如果需要调用有参的就需要指定子类参数
然后在super()的括号里按对应的顺序写好参数。
回复 使用道具 举报
学习!!!!1
回复 使用道具 举报
youtianlong123 发表于 2014-11-13 17:22
无参的构造函数写出来还能算是默认的构造函数吗?

不可以,我记得毕老师说过
回复 使用道具 举报
擦 都搞错了  人家是默认构造函数不是空参构造函数。  这个问题略屌啊,  我不会 求大神指点啊
回复 使用道具 举报
public class Test09 {
       
        public static void main(String[] args) {
                //创建一个有参的GoodStudent时,只要Student类指定super(int num)就会调用Person的有参构造函数
                //GoodStudent gs = new GoodStudent(40);
                //如我我想调用Person 的有参构造函数和Student的有参构造函数 用以下函数即可证明
                GoodStudent gs1 = new GoodStudent(30);
                System.out.println(gs1);
                /*调用了Person中有参的构造函数40
                调用了Student中有参的构造函数40
                调用了GoodStudent中有参的构造函数30*/
               
               
        }
}
        class Person {
                Person() {
                        System.out.println("调用了Person中空参的构造函数");
                }

                Person(int num) {
                        System.out.println("调用了Person中有参的构造函数" + num);
                }
        }

        class Student extends Person {
                Student() {
                        System.out.println("调用了Student中空参的构造函数");
                }

                Student(int num) {
                        super(40);
                        System.out.println("调用了Student中有参的构造函数" + num);
                }

        }

        class GoodStudent extends Student {
                GoodStudent() {
                        System.out.println("调用了GoodStudent中空参的构造函数");
                }

                GoodStudent(int num) {
                        super(40);
                        System.out.println("调用了GoodStudent中有参的构造函数" + num);
                }
        }


回复 使用道具 举报
顶贴,也是一种美德
回复 使用道具 举报
在Person类中自定义一个默认构造函数 在里面输出一条语句,建立对象看是否输出语句就ok了……
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马