黑马程序员技术交流社区

标题: 关于抽象类和接口问题 [打印本页]

作者: 王康2    时间: 2012-4-24 16:03
标题: 关于抽象类和接口问题
接口和抽象类中大多只定义了方法,那

抽象类中可以有成员变量吗?若有,成员变量修饰符有什么限制?
接口中可以有成员变量吗?
作者: 周海诚    时间: 2012-4-24 16:04
本帖最后由 周海诚 于 2012-4-24 16:09 编辑

   
可以说接口是一个特殊的抽象类,它们的区别是:

    1.抽象类可以有构造方法,接口中不能有构造方法。
    2.抽象类中可以有普通成员变量,接口中没有普通成员变量
    3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
    4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
       eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
    5. 抽象类中可以包含静态方法,接口中不能包含静态方法
    6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
        7. 一个类可以实现多个接口,但只能继承一个抽象类。
        
作者: 金超    时间: 2012-4-24 16:05
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
作者: Friends★    时间: 2012-4-24 16:14
抽象类和接口都可以有自己的成员变量。在抽象类中对于成员变量的修饰符没有限制

在接口中,其成员变量是固有被public static final修饰的,相当于全局常量
作者: 崔仁军    时间: 2012-4-24 17:12
抽象类可以包含具体方法和抽象方法  而接口中只能有抽象方法
接口可以看做是一个特殊的抽象类     接口中的方法都是public      
接口中的成员变量都是public final static的
作者: 林德燚    时间: 2012-4-24 18:06
这答案复制张贴也行?!
抽象类和接口都可以有成员变量,只是接口中成员变量只能修饰为public static final ,即为全局常量;
而抽象类成员变量的权限是没有限制的;
接口是特殊的抽象类
我觉得它们最大的区别在于:接口方法没有方法体,即全为抽象方法,而抽象类中的方法可以有方法体;这比较好记;
作者: 孙天    时间: 2012-4-24 20:58
抽象类和接口的区别:
相同点:他们都是不断向上抽取出来的一个抽象的内容。
区别一:
抽象类只能被单继承,接口可以被多实现,避免了单继承的局限性
区别二:
抽象类中可以定义抽象方法和非抽象方法,他可以用于定义体系的基本共性内容
接口中只能定义抽象方法,它主要用于对象的功能扩展
区别三:
抽象类是继承关系,是is a的关系
接口是实现关系,是like a关系
区别四:
抽象类中的成员修饰符是自定义。
就口中的成员修饰符固定
抽象类的特点:
1,没有方法体的方法,称为抽象方法,必须存放在抽象类中。抽象方法和抽象类必须用abstract关键字来修饰
2,抽象类不可以被实例化。因为调用抽象方法没有意义
3,抽象类必须由其子类将抽象类中的抽象方法都覆盖后,其子类才可以实例化,否则该子类还是抽象类
接口的特点:
1,里面方法都是抽象的
2,接口中的成员都有固定的修饰符。最常见的成员:全局常量,抽象方法。
全局常量:public static final
抽象方法:public abstract
3,接口中的成员都是public
4,接口是不可以建立对象的,必须由接口的子类覆盖所有的抽象方法后,该子类才可以实例化 class implements Inter
5,类与类之间是继承关系,类与接口之间是实现关系
6,接口的出现可以多实现,避免了单继承的局限性
7,一个类在继承一个类的同时还可以实现多个接口
8,接口与接口之间是继承关系,而且可以多继承(没有方法体,不会产生调用的不确定性)       
作者: 高彰谦    时间: 2012-4-25 05:14
接口可以有成员变量,修饰符必须为public ,static,fina,虽然可以有这3个修饰符,但是作用都是一样的,即成员变量都是常量,通过接口名调用。
接口的成员方法,修饰符必须为public 或者abstract;
接口没有构造函数。
抽象类,必须有一个public的构造参数供子类调用.
抽象类的成员变量没有约束条件,因为即使是private的成员变量也可以在抽象类的非空方法中使用。
抽象类的一般成员方法没有特殊性。
抽象类的抽象方法声明由于必须又子类实现,所以不能为private;
java的继承体系,只能一个父类,可以多个接口。
作者: xiwangliujiao    时间: 2012-4-25 08:52
使用接口的好处有很多,因为一个类只能有一个父类,如果不能满足要求,就需要实现接口,而接口,是可以实现多个的,接口和类中都是有成员变量的,不过接口中的成员变量是要定义为public static final的,类中的成员变量的修饰符没有限制




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2