已有101人关注
习题10.13
发表在Java图书答疑 2016-08-22
是否精华
版块置顶:
package com.lzw;

public abstract class UseCase1 {
abstract void testAbstract();
UseCase1(){//(1)首先执行父类构造方法
System.out.println("before testAbstract()");
testAbstract();//如果调用了抽象方法,调用子类覆盖的方法。这里调用Atest类的testAbstract()方法
System.out.println("after testAbstarcat()");
}
public static void main(String args[]){
new Atest();
}
}
class Atest extends UseCase1{
private int i=1;//(2)使成员变量进行初始化
void testAbstract(){
System.out.println("testAbstract()"+i);
}
public Atest(){//(3)调用子类构造方法
System.out.println(i);
}
}


这个程序里有两个testAbstract()方法分别是什么意思
分享到:
精彩评论 8
静心_mrkj
学分:0 LV1
2016-08-22
沙发
子类中的testAbstract()方法是子类重写父类中的抽象方法,而父类构造器中的testAbstract()方法其实调用的就是子类中的重写的testAbstract()方法。
421035639
学分:0 LV1
2016-08-23
板凳
[FIELDSET][LEGEND]引自:1楼[/LEGEND]
子类中的testAbstract()方法是子类重写父类中的抽象方法,而父类构造器中的testAbstract()方法其实调用的就是子类中的重写的testAbstract()方法。
[/FIELDSET]

回复:public abstract class UseCase1 {
abstract void testAbstract();
UseCase1(){//(1)首先执行父类构造方法
System.out.println("before testAbstract()");
testAbstract();//如果调用了抽象方法,调用子类覆盖的方法。这里调用Atest类的testAbstract()方法
System.out.println("after testAbstarcat()");
}
这个父类里面有一个abstract void testAbstract()的抽象方法,然后父类里面还有个testAbstract()方法这是什么用法
  
静心_mrkj
学分:0 LV1
2016-08-24
地板
父类构造方法里面的testAbstract()方法调用的是子类中的重写的testAbstract()方法。
421035639
学分:0 LV1
2016-08-24
4L
[FIELDSET][LEGEND]引自:3楼[/LEGEND]
父类构造方法里面的testAbstract()方法调用的是子类中的重写的testAbstract()方法。
[/FIELDSET]

回复:这个我知道,我想问的是父类里面就有两个testAbstract()了,我想知道abstract void testAbstract()这句代码的意思,编译器在编译时不会因为有两个testAbstract()而出错吗
  
421035639
学分:0 LV1
2016-08-24
5L
[FIELDSET][LEGEND]引自:3楼[/LEGEND]
父类构造方法里面的testAbstract()方法调用的是子类中的重写的testAbstract()方法。
[/FIELDSET]
 
回复:而我debug了一下发现程序在执行完子类的System.out.println("testAbstract()"+i);后还是会执行System.out.println("after testAbstarcat()");既然子类的方法会覆盖父类的方法,为什么还会执行父类里的System.out.println("after testAbstarcat()");呢
静心_mrkj
学分:0 LV1
2016-08-25
6L
程序正确的执行顺序是
new Atest() → public Atest(),但并没有执行方法体 → 直接跳转到了UseCase1()这个父类的构造方法里 → System.out.println("before testAbstract()"); → testAbstract();由于testAbstract()方法是抽象方法,所以调用了子类中重写的testAbstract()方法 → System.out.println("after testAbstarcat()"); → 最后再执行子类构造方法public Atest()的方法体“System.out.println(i);”。
421035639
学分:0 LV1
2016-08-25
7L
[FIELDSET][LEGEND]引自:6楼[/LEGEND]
程序正确的执行顺序是
new Atest() → public Atest(),但并没有执行方法体 → 直接跳转到了UseCase1()这个父类的构造方法里 → System.out.println("before testAbstract()"); → testAbstract();由于testAbstract()方法是抽象方法,所以调用了子类中重写的testAbstract()方法 → System.out.println("after testAbstarcat()"); → 最后再执行子类构造方法public Atest()的方法体“System.out.println(i);”。

[/FIELDSET]

回复:理解了,谢谢
  
aaaqqq
学分:0 LV1
2016-09-01
8L
问题1:new Atest() → public Atest(),但并没有执行方法体 为什么没有执行方法体直接跳转到了UseCase1()这个父类的构造方法里。


问题2:testAbstract();由于testAbstract()方法是抽象方法,所以调用了子类中重写的testAbstract()方法,抽象方法为什么就调用了子类中重写的方法。这个执行出来是testAbstract()0   。这个0是因为i默认是0吗???


问题三:最后再执行子类构造方法public Atest()的方法体“System.out.println(i);”。为什么最后执行这个了。
首页上一页 1 下一页尾页 8 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照