抽象类:
抽象类可以没有抽象方法,但一旦声明为抽象类(abstract),就不能用于实例化,即new xxx()是不允许的。
属性和初始化块不能用于抽象(abstract)。
抽象的只能是方法。一旦一个类中有abstract方法,则该类必须为抽象类。
如果一个类实现了某个接口,但没实现接口所提供的方法,则该类必须为抽象类。
由于static修饰的方法属于类,当一个方法用static修饰时,表明可以通过类直接调用而无须实例化,如果此时用abstract修饰,表明无方法体,这与static矛盾,因此static不能用于抽象方法。
final表明方法不能被重写,所以final不能和abstract同时修饰一个方法。
接口:
接口定义了某些类的共同行为规范。接口的目的是使规范和实现分离,降低软件模块之间的耦合性。
由于接口只是定义一组规范,因此接口里面不能有构造方法,初始化块。
接口里只能包含属性(即常量),方法(只能是抽象实例方法),内部类(或接口),枚举。
接口里成员默认是public ,如果想添加访问修饰符,也只能是public。
package lesson7;
interface Output
{
// static final且public
int MAX_SIZE = 1000;
//public abstract 不能用static,因为与abstract矛盾
void input();
void output();
}
class Test
{
public static void main(String[] args)
{
//可以通过接口直接访问接口的变量,因为接口成员变量是public static final
System.out.println(Output.MAX_SIZE);
//错误。因为MAX_SIZE为final变量
Output.MAX_SIZE=10;
}
}
尽管接口不能显示继承任何类,但接口类型的引用变量可以直接赋值给Object引用变量。