为了账号安全,请及时绑定邮箱和手机立即绑定

一个接口比拥有正确的方法更重要吗?

一个接口比拥有正确的方法更重要吗?

慕婉清6462132 2019-12-17 17:13:14
一个接口比拥有正确的方法更重要吗?因此,假设我有这个接口:public interface IBox{    public void setSize(int size);    public int getSize();    public int getArea();   //...and so on}我有一个实现它的类:public class Rectangle implements IBox{    private int size;    //Methods here}如果我想使用iBox接口,就不能以这样的方式创建它的实例:public static void main(String args[]){     Ibox myBox=new Ibox();}对吗?所以我不得不这么做:public static void main(String args[]){     Rectangle myBox=new Rectangle();}如果是这样的话,那么接口的唯一目的就是确保实现接口的类得到了接口所描述的正确方法?或者还有其他接口的用途吗?
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

接口是使代码更加灵活的一种方法。你要做的是:

Ibox myBox=new Rectangle();

然后,如果您决定使用不同类型的框(可能还有另一个库,其中有一个更好的框),那么您可以将代码切换到:

Ibox myBox=new OtherKindOfBox();

一旦你习惯了它,你就会发现这是一种很好的(实际上是必不可少的)工作方式。

另一个原因是,例如,如果您想要创建一个框列表并对每个框执行一些操作,但是您希望该列表包含不同类型的框。在你能做的每一个盒子上:

myBox.close()

(假设iBox有一个CLOSE()方法),尽管myBox的实际类会根据您在迭代中的位置而改变。



查看完整回答
反对 回复 2019-12-19
?
UYOU

TA贡献1878条经验 获得超4个赞

使接口有用的是事实是,“您可以在以后更改您的想法并使用不同的实现,并且只需要更改创建对象的唯一位置”。这不是问题。

真正的要点已经在名称中了:他们定义了一个界面任何人都可以实现来使用在该接口上操作的所有代码。最好的例子是java.util.Collections提供各种专门在接口上操作的有用方法,如sort()reverse()List..这里的要点是,这段代码现在可以用于排序或反转。任何类实现List接口-不仅仅是ArrayListLinkedList,但也包括您自己编写的类,这些类的实现方式可能是编写以下内容的人:java.util.Collections从没想过。

同样,您可以编写在您定义的著名接口或接口上操作的代码,其他人也可以使用您的代码,而不必要求您支持他们的类。

接口的另一种常用用法是回调。例如,java.swing.tableT.ableCellRenderer,它允许您影响Swing表在特定列中显示数据的方式。实现该接口,将一个实例传递给JTable,在表的呈现过程中,您的代码将被调用来完成它的操作。



查看完整回答
反对 回复 2019-12-19
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

我读过的众多用途之一是,如果没有Java中的多继承使用接口,就很难实现:

class Animal{void walk() { } ........ //other methods and finallyvoid chew() { } //concentrate on this}

现在,想象一下这样的情况:

class Reptile extends Animal { //reptile specific code here} //not a problem here

但,

class Bird extends Animal{...... //other Bird specific code} 
//now Birds cannot chew so this would a problem in the sense Bird classes can also call chew() method which is unwanted

更好的设计是:

class Animal{void walk() { } ........ //other methods }

动物没有咀嚼()方法,相反,它被放置在一个接口中,如下所示:

interface Chewable {void chew();}

让爬行动物类实现这一点,而不是鸟类(因为鸟类不能咀嚼):

class Reptile extends Animal implements Chewable { }

在鸟类的情况下,简单地说:

class Bird extends Animal { }



查看完整回答
反对 回复 2019-12-19
  • 3 回答
  • 0 关注
  • 553 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信