接口对象引用谁的实例?举例说明接 口是引用类型。
时间: 2024-02-13 11:03:30 浏览: 19
接口对象引用的是实现该接口的类的实例。举个例子,假设有一个接口Animal,里面有一个方法eat(),有两个类Dog和Cat都实现了这个接口:
```
public interface Animal {
void eat();
}
public class Dog implements Animal {
public void eat() {
System.out.println("Dog is eating.");
}
}
public class Cat implements Animal {
public void eat() {
System.out.println("Cat is eating.");
}
}
```
那么现在可以声明一个Animal类型的变量,用来引用Dog或Cat类的实例:
```
Animal animal1 = new Dog();
Animal animal2 = new Cat();
```
这里animal1和animal2都是Animal类型的变量,但是分别引用了Dog和Cat的实例。由于Animal是一个接口,而不是具体的类,因此Animal类型的变量只能引用实现了Animal接口的类的实例。这表明接口是一个引用类型,可以用来声明变量、作为参数传递等。
相关问题
接口不能被实例化,为什么能够声明接口对象?接口对象引用谁的实例?举例说明接口是引用类型
尽管接口本身不能被实例化,但是我们可以声明接口类型的变量或参数,从而创建接口对象的引用。实际上,接口对象的引用指向的是实现该接口的类的对象,而不是接口本身。
例如,假设我们有一个接口 `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` 类型的变量。
这说明接口是一种引用类型,它的对象实际上是实现该接口的类的对象。通过使用接口对象的引用,我们可以在不知道对象具体类型的情况下,调用实现接口的类的方法,从而提高了代码的灵活性和可维护性。
在Java中定义接口用什么关键字?类实现接口用什么关键字?接口中都可以包含什么?接口能作为类型,实现多态(向上转型)吗?举例说明。
在Java中,定义接口使用关键字`interface`。类实现接口使用关键字`implements`。接口中可以包含常量和抽象方法。常量使用关键字`final`修饰,抽象方法不需要使用关键字`abstract`修饰。
接口可以作为类型,实现多态(向上转型)。例如,假设有一个接口`Animal`,其中包含一个抽象方法`void makeSound()`。现在有两个类`Cat`和`Dog`,它们都实现了`Animal`接口。现在我们可以定义一个`Animal`类型的变量`animal`,然后将`Cat`或者`Dog`的实例赋给它,这样就可以实现多态。例如:
```
Animal animal1 = new Cat();
animal1.makeSound(); // 输出猫叫声
Animal animal2 = new Dog();
animal2.makeSound(); // 输出狗叫声
```
在上面的例子中,`animal1`和`animal2`都是`Animal`类型的变量,但是它们分别指向了`Cat`和`Dog`的实例,实现了多态。