浅谈java中抽象类与接口
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.抽象类和接口的相同点和不同点分别是什么?
相同:都是抽取出来的抽象概念,自身都不能实例化。
不同:①抽象类体现继承关系,一个类只能单继承;接口体现实现关系,一个类可以多实现;
②抽象类中可以定义非抽象方法,供子类直接使用;
③接口的方法都是抽象方法,接口中的成员都有固定修饰符。