1. Java中抽象类abstract
class="java" name="code">
抽象类不能实例化(不能用抽象类创建对象)。
抽象方法就是被abstract修饰的方法,有声明无实现。抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
如果一个类包含了抽象方法,那么这个类一定是抽象类。
如果一个类是抽象类,它可以包含具体的方法,可以包含抽象方法。
如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
public class Test {
public static void main(String[] args){
R r = new R();
}
}
abstract class T {
public abstract void method();
public void test(){
System.out.println("test");
}
}
class R extends T {
public void method(){
System.out.println("method");
}
}
2. Java中接口interface
接口,英文称作interface,接口泛指供别人调用的方法或者函数。
接口中的变量会被隐式地指定为public static final变量。
接口中的所有方法都是抽象方法(无实现,abstract可以省略)。
类实现了接口(类不是抽象类),必须实现接口中所有的方法。
一个类可以实现多个接口,接口之间用“,”分割即可。
接口类型也可以使用多态。
public class Test{
public static void main(String[] args){
MyClass myClass = new MyClass();
myClass.output();
myClass.output2();
myClass.output3();
}
}
interface MyInterface{
public void output();
}
interface MyInterface2{
public void output2();
}
class MyParent{
public void output3(){
System.out.println("output3");
}
}
class MyClass extends MyParent implements MyInterface, MyInterface2{
public void output(){
System.out.println("output");
}
public void output2(){
System.out.println("output2");
}
}
3. Java中抽象类abstract与接口interface对比
1) 抽象类中可以有具体方法,也可以有抽象方法;接口中只能有抽象方法,不能有具体方法;
2) 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
3) 接口中不能含有静态代码块以及静态方法;而抽象类可以有静态代码块和静态方法;
4) 一个类只能继承一个抽象类;而一个类却可以实现多个接口;
补充:
1) 抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。例如:飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。我们将Airplane,bird定义为抽象类,将fly定义为接口。继承抽象类是一个“是不是”关系,而接口实现则是“有没有”的关系。
2) 抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。