美文网首页Java入门基础程序员
浅谈java中抽象类与接口

浅谈java中抽象类与接口

作者: itcode | 来源:发表于2017-09-19 23:52 被阅读28次
    1.抽象类和接口的区别:

    在Java中,使用abstract关键字修饰的类称之为抽象类。抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。抽象类通常用于表示一种抽象的概念。接口可以说是一种特殊的抽象类,接口中只能定义常量和抽象方法。由于接口的特殊性,在定义时需要使用interface关键字。接口中所有方法都是抽象方法,不允许普通方法和属性的存在,接口中抽象方法的修饰符public abstract默认存在,类可以使用implements关键字来实现一个接口。

    1.abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
    2.在abstract class中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。
    3.abstract class和interface所反映出的设计理念不同。其实abstract class
    表示的是"is-a"关系,interface表示的是"like-a"关系。
    4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
    5.接口中定义的变量默认是public static final型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
    6.接口中的方法默认都是public,abstract类型的。
    结论
    abstract class和interface是Java语言中的两种定义抽象类的方式,它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概 念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系(虽然都能够实现需求的功能)。

    2.抽象方法和普通方法有什么区别?

    普通方法必须要有方法体,抽象方法不能有方法体(大括号也没有);
    抽象方法用abstract修饰,访问修饰符不能用private;抽象方法只能存在于抽象类/接口中。

    3.使用抽象类的优势是什么?

    抽象类可以将已经实现的方法提供给其子类使用,使代码可以被复用;
    抽象类中的抽象方法在子类中重写,保证了子类还具有自身的独特性;
    通过抽象类指向其子类的对象,可以实现多态。

    4.抽象类和接口的相同点和不同点分别是什么?

    相同:都是抽取出来的抽象概念,自身都不能实例化。
    不同:①抽象类体现继承关系,一个类只能单继承;接口体现实现关系,一个类可以多实现;
    ②抽象类中可以定义非抽象方法,供子类直接使用;
    ③接口的方法都是抽象方法,接口中的成员都有固定修饰符。

    相关文章

      网友评论

      • qwjcool:接口定义了交互的契约
        抽象类让你可以写默认实现

      本文标题:浅谈java中抽象类与接口

      本文链接:https://www.haomeiwen.com/subject/ipqnsxtx.html