Java超详细介绍抽象类与接口的使用

 更新时间:2022年05月10日 10:49:40   作者:xaiobit_hl  
在类中没有包含足够的信息来描绘一个具体的对象,这样的类称为抽象类,接口是Java中最重要的概念之一,它可以被理解为一种特殊的类,不同的是接口的成员没有执行体,是由全局常量和公共的抽象方法所组成,本文给大家介绍Java抽象类和接口,感兴趣的朋友一起看看吧

1.抽象类的语法和特性

1.1语法

1.在Java中,一个类如果被abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。

// 抽象类:被abstract修饰的类
public abstract class Shape { 
    // 抽象方法:被abstract修饰的方法,没有方法体 
    abstract public void draw(); 
    abstract void calcArea(); 
    // 抽象类也是类,也可以增加普通方法和属性,也可以包含构造方法
    public double getArea() { 
        return area; 
    }
    protected double area; // 面积 
}

1.2特性

1. 抽象类不能直接实例化对象

Shape shape = new Shape(); 
// 编译出错 -> 抽象类不能被实例化

2. 抽象方法不能是 private 的

abstract class Shape { 
    abstract private void draw(); 
}
// 编译出错 -> 抽象方法不能用private修饰

注意:抽象方法没有加访问限定符时,默认是public.

3. 抽象方法不能被 final 和 static 修饰,因为抽象方法就是用来被子类重写的,两者是”天敌“;

public abstract class Shape { 
    abstract final void methodA(); 
    abstract public static void methodB(); 
}
// 编译报错: final和static修饰抽象方法,会出问题,二者属于”天敌“

4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要 使用 abstract 修饰

abstract class Shape {
    abstract void draw();
    abstract public void calcArea();
}
//1.实现抽象方法
class Cycle extends Shape {
    @Override
    void draw() {
        System.out.println("●");
    }
    @Override
    public void calcArea() {
        System.out.println("Π*r*r");
    }
}
//2.不实现抽象父类的抽象方法,但是将子类也定义为抽象类
abstract class Triangle extends Shape {
}

5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类

6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量

2.接口的语法和使用

2.1语法

1.接口的定义格式与类的定义差不多,只要把class改成interface关键字即可。

public interface IOperation {
    public abstract void method1();
    public void method2();
    abstract void method3();
    void method4();
}

接口名的的注意事项:1.接口的命名一般以大写的 "I" 开头;2.接口的名字一般使用形容词性单词

推荐:阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性。

2.2特性

1.接口不能直接使用,必须要被一个类来 "实现",并且这个类要实现这个接口中的所有抽象方法

public interface IOperation {
    public abstract void method1();
    abstract void method2();
}
class A implements IOperation {
    //如果不重写接口中的抽象方法,代码在编译期间就会报错
    //如果不想重写,那么这个类一定是抽象类
    @Override
    public void method1() {
    }
    @Override
    public void method2() {
    }
}

2.接口与接口之间是继承(extends)关系,类与接口之间是实现关系(implements)关系

public interface IOperation {
}
class A implements IOperation {
}
interface Io extends IOperation {
}

3.接口类型是一种引用类型,不能实例化对象

4.接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是public abstract,其他修饰符都会报错)

public interface IOperation {
    private void method() {
    }
    //编译报错
}

5. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现

public interface IOperation {
   void method();
   //编译报错:接口中的方法不能自己实现
   public abstract void A() {
   }
}

6. 重写接口中方法时,不能使用 default 访问权限修饰 7. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量,不能改变

interface IA{
    double a = 3.0; // 默认被:final public static修饰
}
public class TestDemo {
    public static void main(String[] args) {
        System.out.println(IA.a); // 可以直接通过接口名访问,说明是静态的
        //编译报错
        IA.a = 2.0; // 说明brand具有final属性
    }
}

8. 接口中不能有静态代码块和构造方法

interface USB {
    // 编译失败:接口中不能有构造方法
    public USB(){
    }
    {} // 编译失败:接口中不能有实例代码块
    void openDevice();
    void closeDevice();
}

到此这篇关于Java超详细介绍抽象类与接口的使用的文章就介绍到这了,更多相关Java抽象类与接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java多线程编程之java线程简介

    java多线程编程之java线程简介

    线程是程序运行的基本执行单元,线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈
    2014-01-01
  • SpringBoot应用监控Actuator使用隐患及解决方案

    SpringBoot应用监控Actuator使用隐患及解决方案

    SpringBoot的Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用,本文将给大家介绍SpringBoot应用监控Actuator使用隐患及解决方案,需要的朋友可以参考下
    2024-07-07
  • java 实现将Object类型转换为int类型

    java 实现将Object类型转换为int类型

    这篇文章主要介绍了java 实现将Object类型转换为int类型的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Spring Boot 整合 Fisco Bcos的案例分析(区块链)

    Spring Boot 整合 Fisco Bcos的案例分析(区块链)

    本篇文章介绍的 Spring Boot 整合 Fisco Bcos的案例,是在阿里云服务器上部署验证的。大家可根据自己的电脑环境,对比该案例进行开发即可,具体案例代码跟随小编一起看看吧
    2022-01-01
  • SpringBoot整合MOTT动态读取数据库连接信息并连接MQTT服务端

    SpringBoot整合MOTT动态读取数据库连接信息并连接MQTT服务端

    MQTT是一种轻量级的消息传输协议(Message Queuing Telemetry Transport),旨在实现设备之间的低带宽和高延迟的通信,本文给大家介绍了SpringBoot整合MOTT动态读取数据库连接信息并连接MQTT服务端,需要的朋友可以参考下
    2024-04-04
  • maven查看依赖树的方法实现

    maven查看依赖树的方法实现

    Maven依赖树是以当前项目的POM文件为根节点,列出了所有直接或间接依赖的依赖树结构,本文就详细的来介绍一下如何查看,感兴趣的可以了解一下
    2023-08-08
  • SpringBoot开发项目,引入JPA找不到findOne方法的解决

    SpringBoot开发项目,引入JPA找不到findOne方法的解决

    这篇文章主要介绍了SpringBoot开发项目,引入JPA找不到findOne方法的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • ThreadPoolExecutor线程池的使用方法

    ThreadPoolExecutor线程池的使用方法

    这篇文章主要为大家详细介绍了ThreadPoolExecutor线程池的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • 对Java ArrayList的自动扩容机制示例讲解

    对Java ArrayList的自动扩容机制示例讲解

    今天小编就为大家分享一篇对Java ArrayList的自动扩容机制示例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Java Lambda表达式入门示例

    Java Lambda表达式入门示例

    这篇文章主要介绍了Java Lambda表达式,结合简单实例形式分析了Lambda表达式功能、原理、用法及相关操作注意事项,需要的朋友可以参考下
    2019-09-09

最新评论