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

    接口是什么:

    (1) 接口不能被实例化

    (2) 接口只能包含方法声明

    (3) 接口的成员包括方法、属性、索引器、事件

    (4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员

    抽象类是什么:

    抽象类不能创建实例,它只能作为父类被继承。抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类的随意性。

    (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法

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

    (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类

    (4) 具体派生类必须覆盖基类的抽象方法

    (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们

    接口和抽象类的区别:

    (1)抽象类可以有构造方法,接口中不能有构造方法。

    (2)抽象类中可以有普通成员变量,接口中没有普通成员变量

    (3)抽象类中可以包含静态方法,接口中不能包含静态方法

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

    (5)接口可以被多重实现,抽象类只能被单一继承

    (6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法

    接口和抽象类的相同点:

    (1) 都可以被继承

    (2) 都不能被实例化

    (3) 都可以包含方法声明

    (4) 派生类必须实现未实现的方法

    --------------------------------------------------补充---------------------------------------------------------------

    https://cloud.tencent.com/developer/article/1455431

    前言

    对于面向对象编程来说,抽象是它的特征之一。

    在Java中,实现抽象的机制分两种,一为抽象类,二为接口。 抽象类为abstract class,接口为Interface

    今天来学习一下Java中的抽象类和接口。

    目录

    1. 什么是抽象
    2. 什么是抽象类
    3. 什么是接口
    4. 区别
    5. 代码例子
    6. 结语

    什么是抽象

    从具体事物抽出,概括它们共同的方面,本质属性与关系等,称为抽象。看不见,摸不着的东西叫做抽象,抽象是人们对世界万物的感觉,用特定的图像表达出来,要理解抽象的东西,就必需从内心感受它们。

    举例,红色这个词语本身,在没有建立存在色彩这种概念以前,就是一个很抽象的东西。抽象说直白点就是把现实生活中复杂的问题抽象成一个简单的问题。举个例子,如人这个现实中的东西,抽象下就是person这个对象,对象有名字即类名,接着有属性即年龄,性别,身高等。对于对象中的方法即是人要吃饭,睡觉等。

    什么是抽象类

    抽象类的定义和使用格式

    abstract class 类名{
           类体
    }
    class 类名 extends 抽象类 {
              //实现全部抽象方法
    }

    抽象类是类对象的抽象集合,抽象类使用abstract关键字修饰,abstract不能与final并列修饰同一个类,在抽象类中具体抽象的是属性和行为,在抽象类中,含有抽象方法的类为抽象类,一定是抽象类,但抽象类中不一定含有抽象方法。

    抽象类不能被实例化,如果要实例化,需通过子类继承抽象类,然后子类必须重写父类的所有抽象方法。抽象方法在抽象类,仅此声明,方法的具体实现在子类中进行。抽象类只有被继承才有用武之地。

    //抽象类
    public abstract class Person {
     public abstract void run();
    }
    
    //子类继承抽象类
    public class Studentone extends Person{
     @Override
     public void run(){
      System.out.println("人会跑");
     }
    }
    
    //测试
    public class Test {
     public static void main(String[] args){
      Person person = new Student();
      person.run();
     }
    }
    
    //结果
    人会跑

    什么是接口

    接口的定义和使用格式

    interface 接口名 {
              [public] [static] [final] 变量;
              [public] [abstract] 方法;
    }
    class 类名 implement 接口列表 {
              //实现所有接口中声明的方法
    }

    接口是类行为方法的抽象集合,类行为方法,是对方法进行抽象,接口不是一个类,对于抽象类,它是对对象的抽象集合,对象即包含对属性和方法,接口是比抽象类更加抽象的一种。

    Java中的接口是为了降低功能模块间的耦合,子接口中所有方法都是抽象的,都是公有的。接口中的属性是全局常理即为public static final的,方法即public static的。关键字implements实现接口,Java中不能继承多个抽象类,但能实现多个接口,记住接口只能继承接口。

    interface Demo{
     void sleep();
     void play();
    }
    
    class Test implements Demo{
     void sleep();
     void play();
    }

    类必须实现接口中所有的方法,但抽象类可以不用实现接口中的所有方法。

    区别

    抽象类和接口语法层次

    public abstract class Demo {
        abstract void method1();
        void method2(){
        }
    }
    interface Demo {
        void method1();
        void method2();
    }

    可以看出接口是抽象类的特殊化。

    抽象类和接口设计层次

    1. 抽象类是对类抽象,而接口是对行为的抽象
    2. 抽象类为继承关系,接口为实现类与接口之间的契约关系
    3. 抽象类为单继承,接口为多“继承”。子类只能继承一个抽象类,但可实现多个接口。

    代码

    //抽象类
    abstract class Person {
     abstract void run();
     abstract void jump();
    }
    
    //接口
    interface School{
     void go();
    }
    
    //实现
    class Student extends Person implements School{
     void run();
     void jump();
     void go();
    }

    抽象类中成员变量默认为friendly,函数修饰符publicprotecteddefault。 接口属性为静态,public static final,成员函数为public

    结语

    • 详解Java抽象类和接口的区别
  • 相关阅读:
    Linux中权限管理之文件特殊权限
    Linux中权限管理之ACL权限
    Linux用户管理命令
    【并发编程】实现多线程的几种方式
    “数据中台”的再思考
    软件工程六大设计原则总结,案例演示
    你必须要知道的移动端开发知识
    【搞定面试官】你还在用Executors来创建线程池?会有什么问题呢?
    EasyCode实现数据库到Swagger全自动化
    【Java实例】使用Thumbnailator生成缩略图(缩放、旋转、裁剪、水印)
  • 原文地址:https://www.cnblogs.com/suger43894/p/10967859.html
Copyright © 2011-2022 走看看