javase中的接口与抽象类中容易混淆的知识点

时间:2022-10-10 21:01:47

1、接口:

特点:

①所有的变量都具有public static final属性,即使你没有刻意定义它的属性例如:在接口中 int a = 0;即使你没有指定变量a 为 public static final 类型,他默认也是的。因为是final类型所以在定义的时候就要赋初值。


②接口中不能够有构造方法,接口中的方法默认都是public abstract类型的(不能有static、final),方法上的abstract修饰词可写可不写。所有的方法都不能有方法体,一旦实现了某个接口就必须实现该接口中所有的方法,除非该实现类是抽象类,留着等子类来实现。


③接口可以被其他接口继承却不能被其他接口实现,也不能被其他类继承,继承于其他接口的接口的实现类除了需要实现该接口的方法外还需要实现该接口的父接口(暂且这么称呼)中的方法。


④一个类可以实现多个接口,当定义一个接口类型的引用变量指向该接口的某个实现类时,该变量只有接口的方法可见。例如:接口A中声明有方法AA和BB,类B是接口A的实现类,实现了方法AA,BB的同时类B也有自己的方法CC。当通过

A  a = new B();实例化一个对象时,a中只有接口A中的方法可以被调用(AA和BB),如需调用CC需要讲a强转成B类型。实际上a是A类型的引用变量,但是a指向的却是B类型的一个对象,就是说实例化出来的确确实实时B类型的对象。

我们可以通过a.getClass().getName();来获验证。


2.抽象类:

一个抽象类中的成员变量不能是抽象的,除构造方法外的所有方法都可以是抽象的,一个抽象类也可以没有抽象方法,但是一个类中只要有一个抽象方法,该类就必须声明为抽象的,抽象方法前必须加abstract修饰词。


②抽象类可以实现多个接口(所有的类都可以),但是没有继承于某一接口这一说,抽象类实现某个接口时可以不实现该接口中的方法,留着等子类来实现抽象类中的方法不能有方法体,抽象方法只能是public或者protected,抽象方法不能再被static或者final修饰。