• Java 抽象类和接口的理解


    Java 抽象类和接口的理解

    一、抽象类

    为什么使用抽象类(个人理解):

    面向对象的概念是,我们知道的所有的对象都是通过类来描绘的,如果类包含的信息不能描绘一个具体的对象,就需要抽象来解决了,意思是一切事物看上去不同,但本质上相同的具体概念的抽象。例如:三角形或四角形,具体概念上他们是不同的,但是又同属于形状这样的概念,而形状无法用具体概念来对应解释,所以形状就是一个抽象的概念。

    抽象类是把一个或多个固定行为抽象描述,而这一个或多个行为可能有任意的具体实现,而这些具体实现是抽象类的派生类,派生类依赖一个固定的抽象类。

    抽象类的意义:

    1)为子类提供一个公共的类型

    2)封装子类中的重复内容(成员变量和方法)

    3)定义有抽象方法,子类虽然有不同实现,但该方法的定义是一致的。

    特点:

    抽象方法:由abstract修饰的方法为抽象方法,抽象方法只有方法的定义,没有方法的实现

        抽象方法不能被private、static、final或native并列修饰,只能被public、protected修饰 (如果为private则没有意义,因为子类无法继承,子类无法实现)

    抽象类:由abstract修饰的类为抽象类,

        抽象类的抽象方法可以存在也可以不存在,抽象方法一定存在抽象类中

        抽象类不能被创建,因为没有意义(抽象类方法只有定义没有实现)

        抽象类不能被实例化

        抽象类的子类需要重写父类所有抽象方法,否则子类还是抽象类

        抽象类父类已有具体实现的方法,子类可重写也可以直接引用

        抽象类不能被final修饰,也就是说abstract不能与final并列修饰同一个类

        抽象类的子类是一般类,则不能与父类抽象方法同名

    二、接口

    特点:

    接口所有方法都是抽象方法,只有声明,没有实现

    接口所有方法都是public类型

    接口的实现,必须通过子类,子类使用关键字implements,而且接口可以多实现

    一个类可以继承抽象类实现接口

    接口不能继承抽象类,但是可以通过extends关键字继承多个接口,实现接口的多继承

    接口的变量会被隐式指定为public abstract final变量(并且只能public abstract final变量,用private修饰会编译报错)

    抽象类与接口的区别:

    语法层次:

    1)方法区别,抽象类可以拥有抽象方法和拥有非抽象方法,但是接口只能有抽象方法(public abstract方法)

    2)变量区别,抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的

    3)静态方法和静态代码块区别,抽象类可以有静态代码块和静态方法,而接口中不能含有静态代码块以及静态方法

    4)子类区别,只能继承一个抽象类,但是可以实现多个接口

    1.如何定义抽象类?

      被abstract修饰的类为抽象类

      For Example:

      abstract class User{}

      都知道一个创建类只能有一个public类名,所以可以这么写:

      public abstract class User{}

    2.如何定义抽象方法?

      被abstract修饰的方法为抽象方法

      For Example:

      public abstract class User{

        public abstract void test();

      }

      以上可以看出,我并没有在抽象类里面写抽象方法,说明抽象类可存在也可不存在抽象方法。

      间接说明了,创建抽象类,如果没有抽象方法,那么该抽象类,创建出来并没有任何意义。

      而且抽象类需要被继承,如果不继承,那么抽象类如同没有

  • 相关阅读:
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (四) 自动化部署
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (三) 服务观测
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (二) 部署微服务程序
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (一) 部署 Nacos
    C++知识点
    libmkl 学习笔记
    基于tesseract-OCR进行中文识别
    poco编译与运行
    Linux下的I/O复用与epoll详解(转载)
    高并发网络编程之epoll详解(转载)
  • 原文地址:https://www.cnblogs.com/Alan-Jones/p/9117034.html
Copyright © 2020-2023  润新知