zoukankan      html  css  js  c++  java
  • 抽象类与接口的区别

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

    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)多个抽象类。

  • 相关阅读:
    繁简转换OpenCC,autogb 和 autob5,iconv,python的jianfan包
    Linux常用的系统监控shell脚本
    linux系统CPU,内存,磁盘,网络流量监控脚本
    linux系统巡检脚本shell实例
    主流脚本语言的比较和选择
    老男孩python第六期
    如何从 0 开始学 ruby on rails (漫步版)
    C#数学运算表达式解释器
    算法导论 第9章 中位数和顺序统计学(线性时间选择算法)
    ruby语言仅仅是昙花一现
  • 原文地址:https://www.cnblogs.com/qq1141100952com/p/9202536.html
Copyright © 2011-2022 走看看