JAVA父类子类问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 12:15:28
package com.wsy;

public abstract class UseCase1 {
abstract void testAbstract();
UseCase1(){
System.out.println("before testAbstract()");
testAbstract();
System.out.println("after testAbstarcat()");
}
public static void main(String args[]){
new Atest();
}
}
class Atest extends UseCase1{
private int i=1;
void testAbstract(){
System.out.println("testAbstract()"+i);
}
public Atest(){
System.out.println(""+i);
}
}
}
初学JAVA读了很长时间没读明白特别是在抽象方法abstract void testAbstract();如果在子类不定义这个方法是不是就不需要在前面定义这个抽象方法了?
希望有耐心的朋友能一句一句的帮忙解释一下.

最下边给你写了个小程序,如果看懂就明白了

public abstract class UseCase1 {
abstract void testAbstract();

UseCase1() {//父类UseCase1的构造方法 第二步 然后进入父类的构造方法
//就先执行第一个println
System.out.println("before testAbstract()"); //第三步
testAbstract(); //第四步
/*
* 这里不容易理解,这么说吧这个testAbstract()其实就是this.testAbstract();
* 但是它被子类给覆盖了,所以可以理解为UseCase1中的这个方法没了,所以它是个空壳
* 它引导你的代码执行了子类Atest的同名字的testAbstract()方法,而此同时,i并没有
* 赋值,所以i是默认的0; 输出为 testAbstract()0
*/
System.out.println("after testAbstarcat()"); //第五步
//当父类的构造方法执行完毕才会调用子类的构造方法testAbstract()来构造自己,所以第六步输出
//了i的结果1
}

public static void main(String args[]) {
new Atest(); //第一步执行此代码 就是要new出Atest,
//要new出某类的对象就要先调用其父类的构造方法所以 会执行new Case1();
}
}

class Atest extends UseCase1 {
private int i = 1;

void testAbstract() {
System.out.println("testAbstra