关于Java的抽象类和接口的区别

        关于Java中抽象类和接口的区别,这可真是一个老生常谈的问题了,几乎所有的Java面试都会问到,而且还往往是前3题。由此可知,不可谓不重要。

        抽象类是一种特殊的类,它在class前面有abstract关键字来修饰。抽象类有点儿类似于“模板”的作用,其目的是根据它的格式来创建和修改新的类。但是并不能直接由抽象类创建对象,只能通过抽象类派生出新的子类,再由其子类来创建对象。抽象类是不能用new运算符来创建实例对象的类,它可以作为父类被它的所有子类所共享。

        抽象类中有可能有一种特殊的方法——抽象方法,用关键字abstract来修饰。对抽象方法来说,只能声明,不能实现。即只能用“;”结尾,而不能是用“{}”。在抽象类中定义的抽象方法必须在子类派生时被覆盖。abstract不能和private、static、final或者native并列修饰同一个方法。

        有抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法。

        抽象类中可以有构造方法,但是不可以是抽象的。其实在抽象类里面定义构造方法是多余的,因为不能用new来创建对象。

        抽象类与其子类之前是继承关系,仍然是“is a”的关系。比如说,抽象类为动物,abstract class Animal{ }

        狗继承了动物这个抽象类,class Dog extends Animal{ }

        接口是一种特殊的抽象类,使用关键字interface来修饰。

        接口中的数据成员都是静态的且必须初始化。若省略成员变量的修饰符,则系统默认为public static final的。

        接口中的方法必须全部是abstract的,不能有一般的方法。若省略方法的修饰符,则系统默认为是public abstract的。

        接口与抽象类一样不能用new运算符来创建对象。

        利用接口来创建新类的过程称为接口的实现,使用关键字implements。

        接口可以多实现,即子类可以继承多个接口,多个接口之间用逗号隔开。Java是单继承,多实现。class A implements B,C{ }

        接口与其子类是实现的关系,是“has a”的关系。比如说狗有尾巴,interface Tail{}

                                                                                                        狗有爪子,interface Claw{ }

                                                                                                                            class Dog implements Tail,Claw{ }

        综上所述,对于狗这个类来说,继承了动物的抽象类,实现了有尾巴,有爪子这两个接口。

        class Dog extends Animal implements Tail,Claw{ }

        

原创文章 3 获赞 3 访问量 703

猜你喜欢

转载自blog.csdn.net/upon120/article/details/52634458
今日推荐