package xuexi;public abstract class Shape { public int a=20; public int b=30; public int r=4; final double PI=3.14; }package xuexi;public abstract class Rectangle extends Shape{ public void Zhouchang() {System.out.println("周长为:"+(a+b)*2); }}子类不是拥有父类的属性和方法了么,为什么第二个代码输出语句a,b报错,我用this.a不行,Shape.this.a也不行
首先,你第二个代码的方法没有对象去调用它,它怎么会去执行那个方法里面的语句呢。然后,当你要去实例化对象的时候,也只能实例化这些抽象方法的子类(这个子类不是抽象类来的),抽象类是不能直接实例化的,所以你的代码需要这样子:
package xuexi;
public abstract class Shape {
public int a=20;
public int b=30;
public int r=4;
final double PI=3.14;
}
package xuexi;
abstract class Rectangle extends Shape {
public void Zhouchang()
{
System.out.println("周长为:" + (a + b) * 2);
}
}
// 必须有普通类去继承抽象类,抽象类才能被实例化
class NormalZiLei extends Rectangle {
}
public class WoCaiShiZhenZhengDeLei {
public static void main(String[] args) {
Rectangle rectangle = new NormalZiLei();
rectangle.Zhouchang();
}
}