黑马程序员技术交流社区
标题:
求助
[打印本页]
作者:
刘侠光
时间:
2011-12-20 10:03
标题:
求助
接口与抽象类两者有什么区别?而他们的继承机制是怎么样的?求高手指教
作者:
杨强
时间:
2011-12-20 10:08
接口里面只能定义抽象函数 一个类要想实现接口 必须重写接口中的所有函数
抽象类里既可以定义抽象函数,也可以定义普通函数.一个类继承抽象类,必须重写抽象类中的抽象方法 或者声明抽象
抽象类一般用于阻止外部类建立对象.
一个类可以实现多个接口,但只能继承一个类,接口的实现也是java多态的表现
作者:
应国炎
时间:
2011-12-20 10:09
抽象类中有抽象成员和非抽象成员. 接口里的全部都是抽象成员
所以如果继承抽象类,则需要覆写
抽象
成员方法. 实现接口则需要复写
所有的
成员方法
作者:
马德强
时间:
2011-12-20 10:10
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
下面接着再说说两者在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码
作者:
房宝彬
时间:
2011-12-20 10:12
接口里面只能定义抽象函数 一个类要想实现接口 必须重写接口中的所有函数
一个类可以实现多个接口,但只能继承一个类,接口的实现也是java多态的表现
作者:
余松霖
时间:
2011-12-20 10:16
1.抽象类和类.只是抽象类里边没有具体实现的方法.一个抽象类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
3.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
4.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
5.抽象类中的变量默认是 friendly 型(就是友好型),其值可以在子类中重新定义,也可以重新赋值。
6.接口中的方法默认都是 public,abstract 类型的。
作者:
刘博
时间:
2011-12-20 10:55
一.接口
1.什么是接口
接口是一种特殊的抽象类, 其中所有方法都是抽象的
和抽象类相比优点在于: 一个类只能继承一个抽象类, 一个类可以实现多个接口
2.接口和抽象类的区别
抽象类是abstract class, 接口是interface
抽象类中的方法没有默认修饰符, 接口中的方法默认被public abstract修饰
抽象类中的属性没有默认修饰符, 接口中的属性某人被public static final修饰
抽象类使用extends继承, 接口使用implements实现
3.什么时候用接口, 什么时候用抽象类
如果我们在定义一个类, 需要写抽象方法时, 就要考虑使用接口还是抽象类
如果这个类中所有方法都是抽象的, 那么就使用接口, 因为别人实现接口时不占用继承位置
如果这个类中还需要有其他不抽象的方法, 那么就只能用抽象类了
作者:
冯瑞君老师
时间:
2011-12-20 11:30
从语法定义: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。
作者:
郭繁森
时间:
2011-12-20 11:37
个人感觉 接口属于继承类
继承 就是 子类包含父类的所有(本来父类就是抽取子类的相同处),“调用”父类。
作者:
黑马巩伟伟
时间:
2011-12-20 12:28
抽象类与接口的区别
抽象类具有以下特点:
(1) 抽象类中有0-n个抽象方法.
(2) 如果一个类有1-n个抽象方法,那么这个类是抽象类.
接口具有以下特点:
(1) 接口中的方法全部都是抽象方法.
(2) 如果在接口中定义一个方法,默认下这个方法是public abstract的.
(3) 如果在接口中定义一个变量,默认下这个变量是public static final的.
另外,一个类只能继承一个类,但可以实现多个接口.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2