• 抽象类与接口的区别


    在理解它们的区别之前,先了解他们的概念

    1 抽象类的理解

    2 接口的理解

    3 抽象与接口的区别

    4 什么时候使用抽象类与接口

    下面一步步解答

    1:对抽象类的理解

    (1)抽象必须有abstract关键字修饰,并且没有方法体。如果一个类中有抽象方法,则这个类称为抽象类,比如:

    public class  userDao(){

      public abstract register(); //这是一个抽象方法,只有方法名,没有方法体。

    }

    (2)抽象类不能被实例化。

    (3)当一个类是接口时(interface关键字修饰),里面有抽象方法,这个类也是抽象类,当另一个类实现这个接口抽象类时,必须全部实现全部的抽象方法。

    以Externalizable接口为例:
    
    public interface Externalizable{
     
        void writeExternal(ObjectOutput out) throws IOException;
     
        void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
    }
    
    当你实现这个接口时,你就需要实现上面的两个方法:
    
    public class Employee implements Externalizable {
     
        int employeeId;
        String employeeName;
     
        @Override
        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
            employeeId = in.readInt();
            employeeName = (String) in.readObject();
     
        }
     
        @Override
        public void writeExternal(ObjectOutput out) throws IOException {
     
            out.writeInt(employeeId);
            out.writeObject(employeeName);
        }
    }

    (3)可以用public ,protected,private修饰,如果不写,默认default,即public。如果用了private的抽象方法,则子类不能实现private的抽象方法。

    (4)如果一个类继承一个抽象类,但是又没有实现抽象类里面的抽象方法,那么这个类也必须为抽象类,用abstract修饰。

    2 对接口的理解

    (1)接口类是用interface修饰的。定义一个接口如下:

    public interface userDaoImpl{
    
    }
    

    (2) 接口里面可以定义成员变量,用public staic finall修饰,可以省略。但是不能用其它修饰,如private,protect。编译时会出错。

    (3)接口中的方法,全部必须是抽象方法。

    (4)一个类允许实现多个接口

    3  抽象与接口的区别

    (1)抽象可以有静态快或静态方法,而接口不允许有。

    (2)抽象的成员变量可以是各种类型,而接口的成员变量只能是public static finall.

    (3)一个类只能有继承一个抽象类,但是接口可以实现多个抽象类

    4 什么时候使用抽象类与接口

    (1)如果拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。

    (2)如果想多继承(一个类不能继承多个抽象类),就要用接口,接口可以实现(implement)多个抽象类。

  • 相关阅读:
    Eclipse护眼技巧
    Maven搭建SSM框架(Spring+SpringMVC+MyBatis)
    Spring之各jar包作用
    Maven新建web项目jsp报错
    js金额转大写(万元为单位)
    linux常用指令
    ie8下数组不支持indexOf方法解决方法
    string,stringBuffer,stringBuilder的比较
    input限制输入
    spring boot Mybatis --maven
  • 原文地址:https://www.cnblogs.com/qq1141100952com/p/9202536.html
Copyright © 2020-2023  润新知