java调用无参构造函数问题,求帮助呀!
packageSix;publicclasstestextendsPerson{publictest(){super();System.out.println("heih...
package Six;
public class test extends Person{
public test(){
super();
System.out.println("heihei");
}
public test(int a){
System.out.println(a);
}
public void func()
{
System.out.println("3, ");
}
public void function(){
System.out.println("11");
}
public static void main(String[] args) {
test t=new test();
}
}
class Person{
public Person(){
System.out.println("haha");
this.func();
}
public void func(){
System.out.println("1, ");
}
public void function(){
System.out.println("10");
}
}
为什么结果是:
haha
3,
heihei
子类的构造函数中的super()是不是就不管用了??? 展开
public class test extends Person{
public test(){
super();
System.out.println("heihei");
}
public test(int a){
System.out.println(a);
}
public void func()
{
System.out.println("3, ");
}
public void function(){
System.out.println("11");
}
public static void main(String[] args) {
test t=new test();
}
}
class Person{
public Person(){
System.out.println("haha");
this.func();
}
public void func(){
System.out.println("1, ");
}
public void function(){
System.out.println("10");
}
}
为什么结果是:
haha
3,
heihei
子类的构造函数中的super()是不是就不管用了??? 展开
展开全部
你真实想看到的输出是怎么样的
当你new Test()时,默认你有一个有无参构造方法Test()的方法里的第一句,会自动加上一个super();的方法,这句就是调用父类构造方法的意思,这是java规定的规则。
也就是说,你子类上面没加super(),java会自动给你加上个,所以先调用父类的无参构造方法,输出haha
之所以输出3, 是子类覆盖了父类的func方法,不会执行父类的了,你试着把子类中的func方法注释掉,这时候就是调用父类中的func方法
super完后。还会回到子类的无参构造方法里,输出heihei
当你new Test()时,默认你有一个有无参构造方法Test()的方法里的第一句,会自动加上一个super();的方法,这句就是调用父类构造方法的意思,这是java规定的规则。
也就是说,你子类上面没加super(),java会自动给你加上个,所以先调用父类的无参构造方法,输出haha
之所以输出3, 是子类覆盖了父类的func方法,不会执行父类的了,你试着把子类中的func方法注释掉,这时候就是调用父类中的func方法
super完后。还会回到子类的无参构造方法里,输出heihei
追问
谢谢呀!明白了
追答
不用谢,请采纳~_~
展开全部
管用 先调用父类的构造函数
然后父类构造函数里面 调用了func()而这个方法子类重写了 所以调用子类的func方法
然后父类构造函数里面 调用了func()而这个方法子类重写了 所以调用子类的func方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没搞懂你意思,嘿嘿。就你这代码而言,super的确多余,因为你实例化子类对象时,是调用无参构造函数,那么基于继承关系,在调用子类无参构造函数时,先调用父类无参构造函数生成父类对象在调用子类无参构造函数生成子类对象,super的作用在于:显示调用父类你想调用的构造函数。估计你想问的不是这问题,有疑问的是super父类构造函数中有this.func()方法,应该输出的是1,而不是3??? 那你就要明白JVM的处理机制了,在运行时,它调用方法是根据内存中哪个类型的真实对象的,在你这这代码中,真实的对象时test ,所以它会调用重载的func()方法,这就是我的解释,希望采纳。如有疑问,请继续问。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
子类方法与父类方法同名,你在子类里面又写了func(), function 这两个方法,它会把父类方法func(), function() 覆盖掉。你把父类的这两个方法名修改一下,就知道了。super就是子类用来调用父类的,怎么叫不管用呢?不管用j就不会输出haha 了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询