接口不能被实例化,为什么能够声明接口对象?接口对象引用谁的实例?举例说明接口是引用类型
时间: 2023-10-01 09:12:42 浏览: 246
C# 实例化接口对象的方法
5星 · 资源好评率100%
尽管接口本身不能被实例化,但是我们可以声明接口类型的变量或参数,从而创建接口对象的引用。实际上,接口对象的引用指向的是实现该接口的类的对象,而不是接口本身。
例如,假设我们有一个接口 `Shape`,其中定义了一个方法 `getArea()`,表示获取图形的面积。我们还有两个实现了 `Shape` 接口的类 `Circle` 和 `Rectangle`,分别表示圆形和矩形。代码如下所示:
```
public interface Shape {
double getArea();
}
public class Circle implements Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getArea() {
return Math.PI * radius * radius;
}
}
public class Rectangle implements Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public double getArea() {
return width * height;
}
}
```
现在,我们可以声明一个 `Shape` 类型的变量,并将其引用指向一个 `Circle` 或 `Rectangle` 对象,从而创建接口对象的引用。例如:
```
Shape circle = new Circle(2.0);
Shape rectangle = new Rectangle(3.0, 4.0);
```
在上述代码中,`circle` 和 `rectangle` 都是 `Shape` 类型的变量,但是它们分别引用了一个 `Circle` 对象和一个 `Rectangle` 对象,由于 `Circle` 和 `Rectangle` 类都实现了 `Shape` 接口,因此可以将它们的对象赋值给 `Shape` 类型的变量。
这说明接口是一种引用类型,它的对象实际上是实现该接口的类的对象。通过使用接口对象的引用,我们可以在不知道对象具体类型的情况下,调用实现接口的类的方法,从而提高了代码的灵活性和可维护性。
阅读全文