5、(接口的定义与类实现接口)编写一个Java程序,在程序中定义一个接口 Shape,包含两个抽象方法,一个是计算面积 area(),一个计算体积volume(),再定义一个类 Cylinder,实现这个Shape接口,设计一个程序,输出面积和体积; 6、(接口实现类多重继承及名字冲突)编写一个Java程序,要求定义两个接口Face01 和Face02,在接口Face01中定义一个抽象方法 getName() 和一个默认方法 getNum() ,在接口Face02中定义一个同名的默认方法 getNum();再定义NameConflict 类实现这两个接口,实现抽象方法 getName() 和默认方法getNum(),并在其中委托父接口Face01中的同名默认方法;
时间: 2024-02-09 19:09:41 浏览: 132
5、Shape接口和Cylinder类的代码如下:
```java
interface Shape {
double area();
double volume();
}
class Cylinder implements Shape {
double radius;
double height;
public Cylinder(double r, double h) {
radius = r;
height = h;
}
@Override
public double area() {
return 2 * Math.PI * radius * (radius + height);
}
@Override
public double volume() {
return Math.PI * radius * radius * height;
}
}
```
在主程序中可以这样使用:
```java
public static void main(String[] args) {
Shape shape = new Cylinder(2, 5);
System.out.println("Area: " + shape.area());
System.out.println("Volume: " + shape.volume());
}
```
输出:
```
Area: 94.24777960769379
Volume: 62.83185307179586
```
6、接口Face01、Face02和NameConflict类的代码如下:
```java
interface Face01 {
String getName();
default int getNum() {
return 0;
}
}
interface Face02 {
default int getNum() {
return 1;
}
}
class NameConflict implements Face01, Face02 {
@Override
public String getName() {
return "NameConflict";
}
@Override
public int getNum() {
return Face01.super.getNum(); // 显式调用Face01中的默认方法
}
}
```
在主程序中可以这样使用:
```java
public static void main(String[] args) {
NameConflict nc = new NameConflict();
System.out.println(nc.getName());
System.out.println(nc.getNum());
}
```
输出:
```
NameConflict
0
```
由于NameConflict类实现了两个接口,其中都定义了一个默认方法getNum(),因此在NameConflict类中必须实现这个方法并指定调用哪一个接口中的方法。在这个例子中,我们显式地调用了Face01中的默认方法。
阅读全文