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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

王康2

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 王康2 初级黑马   /  2012-4-24 16:03  /  2335 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

接口和抽象类中大多只定义了方法,那

抽象类中可以有成员变量吗?若有,成员变量修饰符有什么限制?
接口中可以有成员变量吗?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 周海诚 于 2012-4-24 16:09 编辑

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

    1.抽象类可以有构造方法,接口中不能有构造方法。
    2.抽象类中可以有普通成员变量,接口中没有普通成员变量
    3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
    4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
       eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
    5. 抽象类中可以包含静态方法,接口中不能包含静态方法
    6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
        7. 一个类可以实现多个接口,但只能继承一个抽象类。
        

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
抽象类和接口都可以有自己的成员变量。在抽象类中对于成员变量的修饰符没有限制

在接口中,其成员变量是固有被public static final修饰的,相当于全局常量
回复 使用道具 举报
抽象类可以包含具体方法和抽象方法  而接口中只能有抽象方法
接口可以看做是一个特殊的抽象类     接口中的方法都是public      
接口中的成员变量都是public final static的
回复 使用道具 举报
这答案复制张贴也行?!
抽象类和接口都可以有成员变量,只是接口中成员变量只能修饰为public static final ,即为全局常量;
而抽象类成员变量的权限是没有限制的;
接口是特殊的抽象类
我觉得它们最大的区别在于:接口方法没有方法体,即全为抽象方法,而抽象类中的方法可以有方法体;这比较好记;
回复 使用道具 举报
孙天 黑马帝 2012-4-24 20:58:34
7#
抽象类和接口的区别:
相同点:他们都是不断向上抽取出来的一个抽象的内容。
区别一:
抽象类只能被单继承,接口可以被多实现,避免了单继承的局限性
区别二:
抽象类中可以定义抽象方法和非抽象方法,他可以用于定义体系的基本共性内容
接口中只能定义抽象方法,它主要用于对象的功能扩展
区别三:
抽象类是继承关系,是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,接口与接口之间是继承关系,而且可以多继承(没有方法体,不会产生调用的不确定性)       

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 总结的很详细!

查看全部评分

回复 使用道具 举报
接口可以有成员变量,修饰符必须为public ,static,fina,虽然可以有这3个修饰符,但是作用都是一样的,即成员变量都是常量,通过接口名调用。
接口的成员方法,修饰符必须为public 或者abstract;
接口没有构造函数。
抽象类,必须有一个public的构造参数供子类调用.
抽象类的成员变量没有约束条件,因为即使是private的成员变量也可以在抽象类的非空方法中使用。
抽象类的一般成员方法没有特殊性。
抽象类的抽象方法声明由于必须又子类实现,所以不能为private;
java的继承体系,只能一个父类,可以多个接口。
回复 使用道具 举报
使用接口的好处有很多,因为一个类只能有一个父类,如果不能满足要求,就需要实现接口,而接口,是可以实现多个的,接口和类中都是有成员变量的,不过接口中的成员变量是要定义为public static final的,类中的成员变量的修饰符没有限制
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马