编写Circle类,要求如下:(以下的所有类、成员属性、成员方法均为公共权限!) (1)1个属性:半径 r,要求封装; (2)1个符号常量:圆周率PI,常量值为3.1415926; (3)4个方法:getArea() -- 返回圆面积(访问控制权限:缺省)getPerimeter() -- 返回圆周长(访问控制权限:受保护的)sum(int n) -- 返回前n个自然数的和(访问控制权限:公共的)printInfo() -- 输出该圆的基本信息,包括半径值、圆面积值、圆周长值 (4)编写若干测试类,测试Circle类中各种不同访问权限属性和方法的调用情况
时间: 2024-03-11 21:49:49 浏览: 71
JavaPD-Ch04mao 类与对象 线下班1
以下是Circle类的代码实现:
```java
public class Circle {
private double r; // 半径,封装
public static final double PI = 3.1415926; // 圆周率
double getArea() { // 计算圆面积,缺省访问控制权限
return PI * r * r;
}
protected double getPerimeter() { // 计算圆周长,受保护的访问控制权限
return 2 * PI * r;
}
public int sum(int n) { // 计算前n个自然数的和,公共的访问控制权限
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
public void printInfo() { // 输出该圆的基本信息,包括半径值、圆面积值、圆周长值
System.out.println("半径:" + r);
System.out.println("圆面积:" + getArea());
System.out.println("圆周长:" + getPerimeter());
}
public void setR(double r) { // 设置半径,提供一个setter方法
this.r = r;
}
}
```
以下是测试类的代码实现:
```java
public class TestCircle {
public static void main(String[] args) {
Circle c = new Circle();
c.setR(5);
// 测试缺省访问控制权限的getArea方法
System.out.println(c.getArea()); // 输出78.539815
// 测试受保护的getPerimeter方法
// System.out.println(c.getPerimeter()); // 编译错误,无法访问
// 测试公共的sum方法
System.out.println(c.sum(10)); // 输出55
// 测试公共的printInfo方法
c.printInfo(); // 输出:半径:5.0 圆面积:78.539815 圆周长:31.415926
}
}
```
在测试类中,我们可以看到:
- 对于缺省访问控制权限的getArea方法,我们可以直接调用,无需继承Circle类或在同一包中。
- 对于受保护的getPerimeter方法,我们无法直接调用,因为它只能被Circle类及其子类访问。在测试类中,我们可以注释掉调用语句,以避免编译错误。
- 对于公共的sum方法和printInfo方法,我们可以直接调用,无需继承Circle类或在同一包中。
阅读全文