首页上一页 1 下一页尾页 8 条记录 1/1页
习题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()方法分别是什么意思
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
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()方法这是什么用法
子类中的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()方法这是什么用法
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()");呢
父类构造方法里面的testAbstract()方法调用的是子类中的重写的testAbstract()方法。
[/FIELDSET]
回复:而我debug了一下发现程序在执行完子类的System.out.println("testAbstract()"+i);后还是会执行System.out.println("after testAbstarcat()");既然子类的方法会覆盖父类的方法,为什么还会执行父类里的System.out.println("after testAbstarcat()");呢
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);”。
new Atest() → public Atest(),但并没有执行方法体 → 直接跳转到了UseCase1()这个父类的构造方法里 → System.out.println("before testAbstract()"); → testAbstract();由于testAbstract()方法是抽象方法,所以调用了子类中重写的testAbstract()方法 → System.out.println("after testAbstarcat()"); → 最后再执行子类构造方法public Atest()的方法体“System.out.println(i);”。
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]
回复:理解了,谢谢
程序正确的执行顺序是
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]
回复:理解了,谢谢
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);”。为什么最后执行这个了。
问题2:testAbstract();由于testAbstract()方法是抽象方法,所以调用了子类中重写的testAbstract()方法,抽象方法为什么就调用了子类中重写的方法。这个执行出来是testAbstract()0 。这个0是因为i默认是0吗???
问题三:最后再执行子类构造方法public Atest()的方法体“System.out.println(i);”。为什么最后执行这个了。