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()是不是就不管用了???
展开
 我来答
wrjdxy
2012-03-22 · TA获得超过324个赞
知道小有建树答主
回答量:238
采纳率:0%
帮助的人:215万
展开全部
你真实想看到的输出是怎么样的
当你new Test()时,默认你有一个有无参构造方法Test()的方法里的第一句,会自动加上一个super();的方法,这句就是调用父类构造方法的意思,这是java规定的规则。
也就是说,你子类上面没加super(),java会自动给你加上个,所以先调用父类的无参构造方法,输出haha
之所以输出3, 是子类覆盖了父类的func方法,不会执行父类的了,你试着把子类中的func方法注释掉,这时候就是调用父类中的func方法
super完后。还会回到子类的无参构造方法里,输出heihei
追问
谢谢呀!明白了
追答
不用谢,请采纳~_~
程序那点事
2012-03-22 · TA获得超过6140个赞
知道大有可为答主
回答量:3253
采纳率:59%
帮助的人:1344万
展开全部
管用 先调用父类的构造函数
然后父类构造函数里面 调用了func()而这个方法子类重写了 所以调用子类的func方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
园园624
2012-03-22 · TA获得超过177个赞
知道答主
回答量:279
采纳率:0%
帮助的人:89.4万
展开全部
没搞懂你意思,嘿嘿。就你这代码而言,super的确多余,因为你实例化子类对象时,是调用无参构造函数,那么基于继承关系,在调用子类无参构造函数时,先调用父类无参构造函数生成父类对象在调用子类无参构造函数生成子类对象,super的作用在于:显示调用父类你想调用的构造函数。估计你想问的不是这问题,有疑问的是super父类构造函数中有this.func()方法,应该输出的是1,而不是3??? 那你就要明白JVM的处理机制了,在运行时,它调用方法是根据内存中哪个类型的真实对象的,在你这这代码中,真实的对象时test ,所以它会调用重载的func()方法,这就是我的解释,希望采纳。如有疑问,请继续问。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
简启明
2012-03-22
知道答主
回答量:6
采纳率:0%
帮助的人:9557
展开全部
子类方法与父类方法同名,你在子类里面又写了func(), function 这两个方法,它会把父类方法func(), function() 覆盖掉。你把父类的这两个方法名修改一下,就知道了。super就是子类用来调用父类的,怎么叫不管用呢?不管用j就不会输出haha 了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式