输出结果是:
father
student speak:null0null
son
student speak:jack,20,midschool.
Hello World!
问题是怎么样去掉结果的前两句??
作者: cs8630323 时间: 2014-12-1 15:55
{:3_68:}删掉代码作者: 金福林 时间: 2014-12-1 16:42
class Person
{
public String name;
public int age;
public Person()
{
//删掉这两句就好了
// System.out.println("father");
//say();
}
public void say()
{
System.out.println("person can say.");
}
}作者: 依米阳光 时间: 2014-12-1 17:05
个人见解:
首先你得知道为什么会出现这样的结果,因为Student类继承Person类,当执行 Student s = new Student()时
①调用Student类的构造函数
②调用Person类的构造函数
③执行Person类的构造函数
④执行Student类的构造函数
当执行③时s.name="jack,";s.age=20; s.school=",midschool.";并未执行,所以会出现你所说的运行结果。解决办法如二楼所说。作者: Cfan_yang 时间: 2014-12-1 17:09
say()方法覆写了父类的say()方法。作者: 雨过山更翠 时间: 2014-12-1 17:49
删了不就完了吗,我来赚点钱作者: Smart_lll 时间: 2014-12-1 18:07
最简单的办法就是删除代码,或者注释掉代码,另一种方式可以改成这样:就是在父类中再写一个含参数的构造函数,至于构造函数的参数可以自己定义,函数体为空即可,接着将子类中隐式调用父类中的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!");
}
}