美文网首页
接口和抽象类的区别

接口和抽象类的区别

作者: 7i昂 | 来源:发表于2019-10-15 22:09 被阅读0次

    抽象类

    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();
    
        }
    }
    

    相关文章

      网友评论

          本文标题:接口和抽象类的区别

          本文链接:https://www.haomeiwen.com/subject/nouemctx.html