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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java小兵 中级黑马   /  2014-12-1 14:55  /  1435 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 java小兵 于 2015-1-26 21:35 编辑
  1. class Person
  2. {
  3.         public String name;
  4.         public int age;
  5.         public Person()        
  6.         {
  7.                 System.out.println("father");
  8.                 say();
  9.         }
  10.         public void say()
  11.         {
  12.                 System.out.println("person can say.");
  13.         }
  14. }
  15. class Student extends Person
  16. {
  17.         public String school;
  18.         
  19.         public Student()
  20.         {
  21.                 System.out.println("son");
  22.                
  23.         }
  24.         public void say()
  25.         {
  26.                 System.out.println("student speak:"+name+age+school);
  27.         }
  28. }
  29. class  ExtendsDe
  30. {
  31.         public static void main(String[] args)
  32.         {
  33.                 Student s = new Student();
  34.                 s.name="jack,";
  35.                 s.age=20;
  36.                 s.school=",midschool.";
  37.                 s.say();
  38.                 System.out.println("Hello World!");
  39.         }
  40. }
复制代码
输出结果是:
father
student speak:null0null
son
student speak:jack,20,midschool.
Hello World!

问题是怎么样去掉结果的前两句??



6 个回复

倒序浏览
{:3_68:}删掉代码
回复 使用道具 举报
class Person
{
        public String name;
        public int age;
        public Person()        
        {
//删掉这两句就好了
               // System.out.println("father");
                //say();
        }
        public void say()
        {
                System.out.println("person can say.");
        }
}
回复 使用道具 举报 1 0
个人见解:
首先你得知道为什么会出现这样的结果,因为Student类继承Person类,当执行 Student s = new Student()时
①调用Student类的构造函数
②调用Person类的构造函数
③执行Person类的构造函数
④执行Student类的构造函数
当执行③时s.name="jack,";s.age=20; s.school=",midschool.";并未执行,所以会出现你所说的运行结果。解决办法如二楼所说。
回复 使用道具 举报 1 0
say()方法覆写了父类的say()方法。
回复 使用道具 举报
删了不就完了吗,我来赚点钱
回复 使用道具 举报
最简单的办法就是删除代码,或者注释掉代码,另一种方式可以改成这样:就是在父类中再写一个含参数的构造函数,至于构造函数的参数可以自己定义,函数体为空即可,接着将子类中隐式调用父类中的super()改成显式调用父类中含参数的的改造方法即可。
class Person
{
        public String name;
        public int age;
        public Person(String str){} //参数自定 函数体为空即可。
        public Person()        
        {
                System.out.println("father");
                say();
        }
        public void say()
        {
                System.out.println("person can say.");
        }
}
class Student extends Person
{
        public String school;
        
        public Student()
        {
                super(school);  // 显式调用父类中的函数体为空的构造函数
                System.out.println("son");
               
        }
        public void say()
        {
                System.out.println("student speak:"+name+age+school);
        }
}
class  ExtendsDe
{
        public static void main(String[] args)
        {
                Student s = new Student();
                s.name="jack,";
                s.age=20;
                s.school=",midschool.";
                s.say();
                System.out.println("Hello World!");
        }
}
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马