接口和抽象类的区别

2019-10-15  本文已影响0人  7i昂

抽象类

package Abstract;

public abstract class AbstractClass {
    //抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法
    public abstract void abstractMethod();
    //抽象方法不能private static final修饰
    //private abstract void eat();
    //抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类
    //抽象类可以有普通方法也可以有static方法
    private static void normalMethod(){

    }
    //可以普通属性和常量
    private String s;
    private static int i;
    private static final int p=100;
    //可以有构造方法
    public AbstractClass(){

    }
    //可以有静态代码块
    static{

    }
    {

    }
    //普通类该有的功能抽象类都有唯一区别就是不能实例化,抽象方法。
}

------------------------------------------------------------------------------------------------------------------------------------------------
package Abstract;

public interface InterfaceClass {
    public abstract void iterfaceMethod();
}

------------------------------------------------------------------------------------------------------------------------------------------------
package Abstract;
//抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们
public abstract class ChildAbstractClass extends AbstractClass implements InterfaceClass{

}

------------------------------------------------------------------------------------------------------------------------------------------------
package Abstract;

public class Child extends ChildAbstractClass {
    //具体派生类必须覆盖基类的抽象方法
    @Override
    public void abstractMethod() {

    }


    @Override
    public void iterfaceMethod() {

    }
}
------------------------------------------------------------------------------------------------------------------------------------------------
package Abstract;

public class Test {
    public static void main(String[] args) {
        //抽象类不能被实例化
        //AbstractClass p= new AbstractClass();
    }
}

接口

package Interface;

public interface IterfaceClass {

    //接口只能包含方法声明(也可以不写abstract编译的时候默认加上)
    public abstract void abstractMethod();
    //抽象方法不能private static final修饰
    //private abstract void eat();
    //可以有普通方法和静态方法
    public static void normalMethod(){

    }
    //可以有普通属性和静态属性和常量但是必须public其它都不可以,必须初始化
    public String s="";
    public static int i=0;
    public static final int p=100;

    //不可以有构造方法
    //public AbstractClass(){
    //}

    //不可以有静态代码块
    //static{
    //}
    //{
    //}

}
------------------------------------------------------------------------------------------------------------------------------------------------
package Interface;

public class Child implements IterfaceClass {


    @Override
    public void abstractMethod() {

    }
}
------------------------------------------------------------------------------------------------------------------------------------------------
package Interface;

public class Test {
    public static void main(String[] args) {
        //接口不能被实例化
        //IterfaceClass p=new IterfaceClass();
        System.out.println(""+ IterfaceClass.p);
        IterfaceClass p=new Child();

    }
}
上一篇 下一篇

猜你喜欢

热点阅读