1)class A{
A(){}
}
class B extends A{
B(){} //这里的方法体没有加入父类的方法
}
class Test{
public static void main(String[] args){
B b=new B();
b.B();
}
}
2)然后我把程序改为
class A{
A(){}
}
class B extends A{
B(){super();}
}
class Test{
public static void main(String[] args){
B b=new B();
b.B();
}
} //我在B的构造方法中加入了父类的方法,应该符合 子类的构造过程中必须调用父类的构造方法,这个条件,但是为什么还是出现同样的错误,求解!!!!
总结,b.后边跟的是成员方法或者成员变量,不可能跟构造方法和代码块。 作者: 朝哥 时间: 2012-6-6 09:04
B()是构造方法。补充一句,函数又叫方法。作者: 王月 时间: 2012-6-6 09:44
1,LZ的错误不再构造方法上。即使子类 B 中的构造方法中不加super()语句,也会默认加上的。
2,错误的地方是在主函数的 B b = new B; b.B();这里,构造方法是用来创建对象的,所以是不可能被对象调用的。最多也就可以在子类中被super或this指定。
3,解决:所以如果LZ想让主程序能以这样的形式执行的话,必须在子类中给定一个B的方法(普通方法)。LZ的代码我稍微修改了一下,希望能帮到你。
class A{
A(){}
}
class B extends A{
B(){} //里面不需要加super,会默认加上的
public void B() {
}
}
class Test{
public static void main(String[] args){
B b=new B();
b.B();
}
}
4.楼主的第二个问题,是关于多态的。
1,如果是LZ上面那种格式:B b = new B();叫做子类引用指向子类对象,都是子类,不是多态,b.B();不需要调用父类方法,直接就能调用到子类本身的方法。
2,如果把B改成 A 即:A b = new B();这就叫做父类引用指向子类对象,是多态。所以b.B()方法会先去父类A需找是否有B()方法,如果有就执行,没有就会执行 B 中的B()方法。
注意:这里的B()方法是public void B() {}。
帮LZ解答问题,我也重新复习了一遍,LZ多理解有颜色部分的内容。
作者: 孙峰 时间: 2012-6-6 10:14
王月 发表于 2012-6-6 09:44
1,LZ的错误不再构造方法上。即使子类 B 中的构造方法中不加super()语句,也会默认加上的。
2,错误的地方 ...