Java 继承中的变量访问问题及解决方法 - Rectangle 和 Column 类示例
public class Rectangle { int length; int wide; public Rectangle(int length, int wide) { this.length = length; this.wide = wide; } public Rectangle() {} //周长 public int perimeter() { return (length+wide)2; } //面积 public int area() { return lengthwide; } } //四棱柱 public class Column extends Rectangle { int height; public Column(int length, int wide, int height) { super(length, wide); this.height = height; } public Column() {} //表面积 public void surfaceArea() { int surfaceArea = perimeter()*height + area()*2; System.out.println("表面积是:"+surfaceArea); } //体积 public void volume() { int volume = area()*height; System.out.println("体积是:"+volume); } } 为什么报错内容:在Column类中,perimeter和area变量没有定义。这是因为这两个变量是在Rectangle类中定义的,而在Column类中没有直接访问这两个变量的权限。 解决这个问题可以有两种方法: 1. 在Column类中重新计算周长和面积,而不是直接访问Rectangle类中的变量。可以通过调用Rectangle类中的perimeter()和area()方法来获取这两个值。 2. 将perimeter和area变量定义为protected,这样子类可以直接访问这两个变量。在Rectangle类中将这两个变量的访问修饰符改为protected即可。 下面是第一种解决方法的修改代码示例: java public class Rectangle { int length; int wide; public Rectangle(int length, int wide) { this.length = length; this.wide = wide; } public Rectangle() {} //周长 public int perimeter() { return (length+wide)*2; } //面积 public int area() { return length*wide; } } //四棱柱 public class Column extends Rectangle { int height; public Column(int length, int wide, int height) { super(length, wide); this.height = height; } public Column() {} //表面积 public void surfaceArea() { int surfaceArea = perimeter()*height + area()*2; System.out.println("表面积是:"+surfaceArea); } //体积 public void volume() { int volume = area()*height; System.out.println("体积是:"+volume); } } 在Column类中,perimeter()方法和area()方法被修改为返回周长和面积的值,然后在计算表面积和体积时调用这两个方法获取相应的值。
原文地址: https://www.cveoy.top/t/topic/pA3J 著作权归作者所有。请勿转载和采集!