zoukankan      html  css  js  c++  java
  • Java基础——抽象类和接口

    抽象类和接口

    引入

    在继承关系中,基类作为类生成对象,对程序来说不合理。
    动物类作为基类,生成对象显然不合理
    由此,我们可以设计定义基类为抽象类

    此外,动物经过人类驯化,可以衍生出一些特别的技能
    例如马戏团的老虎跳火圈、狗熊自行车等
    这种通过训练后天获得的可以通过Java的接口实现

    抽象类

    abstract修饰的类是抽象类。

    public abstract class Animal{
          
    }
    

    特点

    1. 抽象类不能实例化对象
    2. 抽象类中可以定义抽象方法
    3. 抽象类中可以没有抽象方法

    抽象方法

    abstract修饰的方法是抽象方法。

    • 抽象方法只有方法的声明,没有方法的实现,没有方法体。
    • 包含抽象方法的类必须是抽象类
    public abstract class Animal{
          public abstract void eat();
    }
    

    抽象类的继承

    1. 子类继承抽象基类后,必须实现基类中的抽象方法。
    2. 或自身也定义为抽象类
      Animal抽象基类为例
    public class Cat extends Animal{
          //实现抽象方法
          public void eat(){
                System.out.println("吃饭");
          }
    }
    
    //或者
    public abstract class Cat extends Animal{
          //不实现抽象方法
    }
    

    接口

    Java接口是一系列方法的声明
    接口可以看作是一种特别的抽象类

    特点

    • 包含常量,常量可以不加final修饰符
    • 常量必须初始化
    • 包含方法的声明,方法可以不加abstract修饰符
    • 不包含变量
    • 不包含方法的实现。(staticdefault修饰的方法除外)
    • 接口不能继承类
    • 接口不能实例化
    interface Train{
          void kneading();
    }
    

    使用

    接口和继承类似,直接在类声明后添加implements即可。

    public class Cat implements Train{
          public void kneading(){
                System.out.println("踩奶");
          }
    }
    

    与继承extends不同,接口有不一样的特性:

    • 一个类可以实现多个接口
    • 一个接口可以被多个无关类实现
    • 一个类实现接口,必须实现接口所以的抽象方法||定义为抽象类

    接口的继承

    Java接口的继承是多继承机制,一个接口可以同时继承多个接口
    Java接口继承父接口后,自动继承父接口的所以方法和属性。

    interface Train extends Practice,Drill...{
          //接口代码
    }
    

    意义

    • 补足Java类单继承的缺点
    • 接口的抽象方法,可以在不同类中被实现

    JDK8接口

    随着技术更新,接口也有新的规则。

    1. 允许定义static方法

    2. 允许定义default方法

    interface JDK8{
          static void method(){
                System.out.println("接口静态方法");
          }
    
          //在重写中,不能再加default修饰符
          default void method(){
                System.out.println("接口默认方法");
          }
    }
    

    因为默认方法不是抽象方法,所以可以不重写


    博客相关java项目:查看Github项目
    对应github项目:Abstract、Interface
    导入项目的方法: Java基础——Java如何导入本地项目

  • 相关阅读:
    LVM详解
    redis数据类型
    radis数据库安装
    POJ3294 Life Forms 【后缀数组】
    BZOJ1076 [SCOI2008]奖励关 【状压dp + 数学期望】
    POJ2774 Long Long Message 【后缀数组lcp】
    POJ2406 Power Strings 【KMP 或 后缀数组】
    POJ3261 Milk Patterns 【后缀数组】
    BZOJ3289 Mato的文件管理 【莫队 + 树状数组】
    BZOJ2460 [BeiJing2011]元素 【线性基】
  • 原文地址:https://www.cnblogs.com/occlive/p/13388778.html
Copyright © 2011-2022 走看看