什么时候用interface
时间: 2023-10-22 15:08:18 浏览: 53
当您希望定义一个抽象数据类型并规范其公共方法时,可以使用接口。接口定义了类或对象应该遵循的方法和属性的列表,但不包含具体实现。接口允许不同的类实现相同的接口,并且可以使用相同的代码来处理它们。
一般来说,如果您需要定义一个可以由多个类实现的公共协议,并且希望代码能够灵活地处理不同的实现,则应该使用接口。例如,如果您正在编写一个图形用户界面库,并且希望允许开发人员编写自定义控件,则可以定义一个“可绘制”接口,以确保所有控件都具有必要的绘制方法。
相关问题
在设计模式中什么时候用interface好,什么时候用abstract好
在设计模式中,使用interface主要是为了定义一组相关的方法,而不关心方法的具体实现。它可以用来实现多态,使得不同的类实现相同的方法,但是具体实现可以各不相同。
而使用abstract则是为了定义一个抽象类,其中可能包含一些具体的实现,但是其中也有一些方法是需要具体子类来实现的。它可以用来实现代码的重用,同时也可以用来约束子类的行为。
因此,当我们需要定义一组相关的方法,并且希望多个类实现这些方法时,应该使用interface。而当我们需要实现代码的重用,并且希望约束子类的行为时,应该使用abstract。当然,在具体的设计中,我们也可以根据实际情况来选择使用哪一种方式。
我们知道在Java中要实现多态,只需要定义interface就行了,参数用interface类型,这样任意实现了这个interface的子类都可以传入。然而唯独有一个例外:当要构造一个新的实例的时候,interface是不能new的,必须要指定具体的子类,这就严重破坏了接口依赖。 这段话什么意思,请举例
这段话的意思是,在Java中,如果要实现多态,可以使用接口来定义参数和变量类型,这样就可以传入任意实现了这个接口的子类,实现多态的效果。但是,在创建实例时,如果直接使用接口类型来进行实例化,是不合法的,因为接口是一个抽象的定义,不能直接实例化,必须要使用具体的子类来进行实例化。
举个例子,假设我们有一个接口Animal,里面定义了一个eat()方法,然后我们分别有Dog和Cat两个类实现了Animal接口。如果我们要传入一个Animal类型的参数,我们可以这样写:
```
public void feedAnimal(Animal animal) {
animal.eat();
}
```
这样,我们传入的参数可以是Dog对象,也可以是Cat对象,因为它们都实现了Animal接口,实现了多态的效果。
但是,如果我们要创建一个新的Animal对象,就必须要指定具体的子类来进行实例化,比如:
```
Animal animal = new Dog();
```
这里我们使用了具体的子类Dog来进行实例化,而不是Animal接口,这就破坏了接口的依赖性。如果我们要扩展Animal接口,就必须要修改创建Animal对象的代码,这就不符合面向对象编程的开闭原则。