zoukankan      html  css  js  c++  java
  • 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();

      }

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

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

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

  • 相关阅读:
    Spring之调度器(Scheduler)
    Spring之拦截器(Interceptor)
    ThreadLocal相关
    hibernate操作数据库
    文件操作的工具类
    日期操作工具类
    有关mysql的utf8和utf8mb4,以及Illegal mix of collations for operation 'like'
    [原]nginx 一下快一下慢的问题
    再谈微信公众号网页授权的40163错误
    用DBCC CHECK修复SQL2000的数据库一致性问题
  • 原文地址:https://www.cnblogs.com/Alan-Jones/p/9117034.html
Copyright © 2011-2022 走看看