A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

jiankun1987

注册黑马

  • 黑马币:35

  • 帖子:3

  • 精华:0

© jiankun1987 注册黑马   /  2013-4-26 23:57  /  1849 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Java中的接口是“完全抽象”的抽象类,也就是说,接口中定义的方法都是抽象的,没有方法体。 那类为什么还要实现接口呢,直接把想要的功能在类中定义不就行了。

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2

查看全部评分

10 个回复

倒序浏览
关于JAVA中接口存在的意义:
1、重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。
2、简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口,这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白)。
3、维护、拓展性:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类,可是在不久将来,你突然发现这个类满足不了你了,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦,如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。
4、安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务,而不涉及任何具体的实现细节。这样就比较安全、严密一些;

好好看毕老师电脑主板中搭载声卡、网卡的例子就明白的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
因为java接口中的方法都是抽象的呀,抽象的方法就是说,只有声明没有定义


接口编程的直接好处就是:实现多态……同一个接口,却可以调用不同的底层实现……

比如说:定义了一个Dao接口,但接口实现类却有多个(如采用JDBC或Hibernate实现)。调用的时候,只需使用同一个Dao接口类型的变量,就可以调用到不同底层实现的接口实现类(相当于屏蔽了底层实现,直接使用即可)。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报

楼主你好:

1:接口中有抽象方法,说明接口不可以实例化。接口的子类必须实现了接口中所有的抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。
2:类与类之间存在着继承关系,类与接口中间存在的是实现关系。
继承用extends  ;实现用implements ;
3:接口和类不一样的地方,就是,接口可以被多实现,这就是多继承改良后的结果。java将多继承机制通过多现实来体现。
4:一个类在继承另一个类的同时,还可以实现多个接口。所以接口的出现避免了单继承的局限性。还可以将类进行功能的扩展。
5:其实java中是有多继承的。接口与接口之间存在着继承关系,接口可以多继承接口。


接口都用于设计上,设计上的特点:(可以理解主板上提供的接口)
1:接口是对外提供的规则。
2:接口是功能的扩展。
3:接口的出现降低了耦合性。
  1. 成员变量:public static final
  2. 成员方法:public abstract
  3. interface Inter{
  4. public static final int x = 3;
  5. public abstract void show();
  6. }
复制代码

评分

参与人数 1黑马币 +10 收起 理由
无敌123 + 10 赞一个!

查看全部评分

回复 使用道具 举报
呵呵!这个问题举个例子给你听吧!
比如说你的笔记本电脑的USB接口!
如果按照你的说法!你想用一个U盘那你就要必须在电脑的内部实现洛!这样明显就不符合现实要求啊!
而你电脑留着的USB接口就好比程序中你定义的接口!
比如你想读取U盘中的数据,就把U盘插在接口处就可以了!
而U盘想插在电脑上使用,接口就必须要要符合电脑的插口!
就像你定义的一个类去实现一个接口,一个道理!还有你的移动设备,如手机啊!USB接口的散热器啊!
都要实现USB接口才能很好的和电脑连接对吧!

这样子不管你是什么设备只要你符合了USB的接口,是不是都可以用!

在程序中使用接口的好处就可以提高程序的扩展性!实现设计与实现相分离!

接口其实就是一种约定,也是一种能力!
约定:其实就是一种规则!
能力:只要你实现了这个接口就具备这个接口的功能!
就像那些USB接口的设备,就可以和电脑很好的连接在一起!

说的可能不是很清楚!希望可以帮到你!

电脑只要定义了接口!你就不用去管那些设备是怎么实现的!反正只要实现了就可以用!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
二楼说的很清楚啦。补充一点:
接口用于扩展功能,管理这些接口比管理各种各样功能的类方便
举个例子,在写链接数据库程序的时候,我们不知道用户使用什么数据库 splserver  or  myspl oracle等
如果使用接口,那就方便多了
回复 使用道具 举报
新手第一次回答,不知道我的理解对不。你说的直接把想要的功能在类中也是可以的,如果是一个小程序这完全可以,如果程序稍微大一点没有接口,这个程序就会显的很复杂麻烦,但是把常用的方法放到一个接口里,具体类按上接口后,再根据类的情况编写方法体就会让程序显得很有条理。适当的接口能让程序更具有模块性,这样使得程序的实现以及维护更简单

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
使用abstract注意事项
  1)、抽像类中可以没有抽象方法。
                  如:
  public abstract  class AbstractDemo {
                                //没有包含任何抽象方法
                            Public void run(){
          //代码实现
  }
  }
  2)、包含了抽象方法的类,必须是抽象类。
                  如果一个类包含了抽象方法,则这个类必须是抽象类。否则会编译出错。
  3)、没有抽象的构造方法,也没有抽象的静态方法。
                  如以下是错误的定义:
                public abstract class Base {
                        abstract Base(){
                                //抽象的构造方法,出错.
                        }
                        //错误,抽象的静态方法
                        public abstract static void run();
  }
  抽象类中,可以有静态方法,但静态方法不能为抽象方法。
4)、抽象类中,可以有非抽象的构造方法
如以下定义是正确的:
public abstract class Base {
        Base(){        //非抽象的构造方法
               
        }
}
5)、抽象类及抽象方法不能被final修饰
如以下定义是错误的:
public final abstract class Base {        //不能同时使用final和abstract修饰类
        abstract final void aa();                //不能同时使用final和abstract修饰方法
}
因为,被final修饰的类,不能被子类继承,而抽象类,又是专门用于继承的,所以两者矛盾,不能同时使用。
6)、抽象方法不能被private修饰
        因为抽象类是为了继承而存在,抽象方法又是专门让子类实现的方法,如果用private(私有)修饰,则子类不能实现。所以,以下定义是错误的:
public abstract class Base {
        //抽象方法,不能用private修饰
        private abstract void aa();
}
但可以被public、protected、或是直接不使用修饰符(friendly)修饰。
7)、继承抽象类的类,不能缩小抽象方法的访问修饰符,但可以放大访问修饰符。
如:
public abstract class Base {
        //抽象方法,不能用private修饰
        protected abstract void aa();                //注意。这是protected的。
}
以下的错误的,因为修改小了方法aa()的访问:
public class One extends Base{
        void aa(){
                //错误,friendly(默认)的访问级别,小于protected.
                //所以。这儿只能是public或是protected.
        }       
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
hmr8 中级黑马 2013-4-27 01:57:57
9#
接口是可以多实现的,而类只能单继承!
回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
1、可扩展:类可以改,可以换,但是只要接口不变,使用这个接口的代码就不用变
2、便于开发:给你一个接口,你去用就行,给我同样的接口,我去实现就行,咱俩的工作就互不耽误
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马