java接口和抽象类的区别

来源:互联网 发布:网络教育包过骗局 编辑:程序博客网 时间:2024/05/21 19:45

接口实现和类继承的规则不同,为了数据的安全,继承是一个类只能继承一个父类,是单继承。

 一个类可以实现多个接口,接口弥补了类不能多继承的特点。

接口的特点:
A:接口用关键字interface表示
interface 接口名 {}
B:类实现接口用implements表示
class 类名 implements 接口名 {}
C:接口不能实例化
那么,接口如何实例化呢?
按照多态的方式来实例化。
D:接口的子类
a:可以是抽象类。但是意义不大。
b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
由此可见:
A:具体类多态(几乎没有)
B:抽象类多态(常用)
C:接口多态(最常用)
//定义动物培训接口interface AnimalTrain {public abstract void jump();}//抽象类实现接口abstract class Dog implements AnimalTrain {}//具体类实现接口class Cat implements AnimalTrain {public void jump() {System.out.println("猫可以跳高了");}}class InterfaceDemo {public static void main(String[] args) {//AnimalTrain是抽象的; 无法实例化//AnimalTrain at = new AnimalTrain();//at.jump();AnimalTrain at = new Cat();at.jump();}}

接口和抽象类的最大区别:
1.Java抽象类可以提供某些方法的部分实现,而接口不可以。

 在语法上:
1.abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。 继承抽象类使用的是extends关键字,实现接口使用的是implements关键字,继承写在前面,实现接口写在后面。如果实现多个接口,中间用逗号分隔。
 
2.在abstract class中可以有自己的数据成员,也可以有非abstract的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

4.实现接口的类必须实现其中的所有方法,继承自抽象类的子类实现所有的抽象方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

6.抽象类中的变量默认具有 friendly权限,其值可以在子类中重新定义,也可以重新赋值。

7.接口中的方法默认都是 public abstract 类型的。

0 0
原创粉丝点击