zoukankan      html  css  js  c++  java
  • [Java学习]面向对象-抽象类;接口

    抽象类

    用途

    借助抽象类可以实现代码的重用。

    特点

    • 抽象类无法实例化。但抽象类有构造方法,在子类创建对象时用。
    • 抽象类中可以定义抽象方法,不能有函数体。也只有抽象类中可以定义抽象方法。

    为什么抽象类不能实例化却可以有构造方法

    • super用法
        super是指向父类的引用,如果构造方法没有显示地调用父类的构造方法,那么编译器会自动为它加上一个默认的super()方法调用。如果父类由没有默认的无参构造方法,编译器就会报错,super()语句必须是构造方法的第一个子句。
        定义子类的一个对象时,会先调用子类的构造函数,然后在调用父类的构造函数,如果父类函数足够多的话,会一直调用到最终的父类构造函数,函数调用时会使用栈空间,所以按照入栈的顺序,最先进入的是子类的构造函数,然后才是邻近的父类构造函数,最后再栈顶的是最终的父类构造函数,构造函数执行是则按照从栈顶到栈底的顺序依次执行.
      所以父类构造方法可以写一些所有子类共有的方法,使得在子类初始化时不用每个都写同样的方法

    接口

    用途

    • 接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。
    • 使项目分层,所有层都面向接口开发。(类实现接口、类调用接口)
    • 使代码间的耦合度降低。

    特点

    接口也是一种引用类型,可以等同看作类。
    不同的,

    • 接口没有构造方法。
    • 接口中只能出现常量和抽象方法。接口中常量的public static final 可省略 ,抽象方法的public abstract 可省略。
    • 接口和接口之间可以多继承(extends)。一个类可以实现(implements)多个接口。
    • 一个非抽象的类实现接口,必须将接口中的所有方法实现(即覆盖)。

    为什么接口中方法和常量默认是public的,为什么接口中没有变量只有常量

    1. 接口是一种约束和规范,是一种更加更高级的抽象类,抽象类的方法必须是公开的,因为要给别的类去实现。此外由于子类的访问级别不能低于父类,所以子类在实现接口重写方法时的修饰符必须是public。
    2. 接口中没有变量的原因;既然是约束和规范,怎么能够定义一个大家都可以改的东呢。

    接口与抽象类对比

    • 语法的区别:
      • 关于一些有的没的
        1. 抽象类可以有构造方法,接口中不能有构造方法。
        2. 抽象类中可以有普通成员变量,接口中没有普通成员变量
        3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
        4. 抽象类中可以包含静态方法,接口中不能包含静态方法
      • 关于访问域
        5. 抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
        6. 抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
      • 关于继承
        7. 一个类可以实现多个接口,但只能继承一个抽象类。
    • 用途上的区别
      • 借助抽象类可以实现代码的重用,接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。

    参考链接

    https://blog.csdn.net/qq_41933748/article/details/82670072
    https://www.cnblogs.com/yyy6/p/8976584.html

  • 相关阅读:
    dp 简单例题poj 1260 Pearls
    多校赛 Barareh on Fire
    中国剩余定理的简单应用 poj 1006 Biorhythms
    CF 5A. Chat Server's Outgoing Traffic
    springmvc使用aop心得
    Firefox添加插件支持修改Headers
    提高网站打开速度的18点要素
    用maven打包项目成war文件
    springmvc使用@ResponseBody返回json乱码解决方法
    用JS实现删除买家信息(阿里巴巴模拟笔试)
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10463045.html
Copyright © 2011-2022 走看看