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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘侠光 黑马帝   /  2011-12-20 10:03  /  2219 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

接口与抽象类两者有什么区别?而他们的继承机制是怎么样的?求高手指教

9 个回复

倒序浏览
杨强 黑马帝 2011-12-20 10:08:57
沙发
接口里面只能定义抽象函数  一个类要想实现接口 必须重写接口中的所有函数
抽象类里既可以定义抽象函数,也可以定义普通函数.一个类继承抽象类,必须重写抽象类中的抽象方法 或者声明抽象
抽象类一般用于阻止外部类建立对象.
一个类可以实现多个接口,但只能继承一个类,接口的实现也是java多态的表现

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
抽象类中有抽象成员和非抽象成员.  接口里的全部都是抽象成员

所以如果继承抽象类,则需要覆写抽象成员方法.  实现接口则需要复写所有的成员方法
回复 使用道具 举报

下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
下面接着再说说两者在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
接口里面只能定义抽象函数  一个类要想实现接口 必须重写接口中的所有函数
一个类可以实现多个接口,但只能继承一个类,接口的实现也是java多态的表现

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报

      1.抽象类和类.只是抽象类里边没有具体实现的方法.一个抽象类只能使用一次继承关系。但是,一个类却可以实现多个interface。
  2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
  3.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
  4.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
  5.抽象类中的变量默认是 friendly 型(就是友好型),其值可以在子类中重新定义,也可以重新赋值。
  6.接口中的方法默认都是 public,abstract 类型的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题加分!

查看全部评分

回复 使用道具 举报
刘博 黑马帝 2011-12-20 10:55:34
7#
一.接口
        1.什么是接口
                接口是一种特殊的抽象类, 其中所有方法都是抽象的
                和抽象类相比优点在于: 一个类只能继承一个抽象类, 一个类可以实现多个接口
        2.接口和抽象类的区别
                抽象类是abstract class, 接口是interface
                抽象类中的方法没有默认修饰符, 接口中的方法默认被public abstract修饰
                抽象类中的属性没有默认修饰符, 接口中的属性某人被public static final修饰
                抽象类使用extends继承, 接口使用implements实现
        3.什么时候用接口, 什么时候用抽象类
                如果我们在定义一个类, 需要写抽象方法时, 就要考虑使用接口还是抽象类
                如果这个类中所有方法都是抽象的, 那么就使用接口, 因为别人实现接口时不占用继承位置
                如果这个类中还需要有其他不抽象的方法, 那么就只能用抽象类了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
从语法定义:abstract class和interface  

在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。  

使用abstract class的方式定义Demo抽象类的方式如下:  

abstract class Demo {  
abstract void method1();  
abstract void method2();  
…  
}  

使用interface的方式定义Demo抽象类的方式如下:  

interface Demo {  
void method1();  
void method2();  
…  
}  

      在abstract class方式中,Demo可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的abstract class。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
郭繁森 黑马帝 2011-12-20 11:37:18
9#
个人感觉 接口属于继承类

继承 就是 子类包含父类的所有(本来父类就是抽取子类的相同处),“调用”父类。
回复 使用道具 举报
抽象类与接口的区别
抽象类具有以下特点:
    (1) 抽象类中有0-n个抽象方法.
    (2) 如果一个类有1-n个抽象方法,那么这个类是抽象类.
接口具有以下特点:
    (1) 接口中的方法全部都是抽象方法.
    (2) 如果在接口中定义一个方法,默认下这个方法是public abstract的.
    (3) 如果在接口中定义一个变量,默认下这个变量是public static final的.
另外,一个类只能继承一个类,但可以实现多个接口.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马