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抽象类与接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot集成tomcat详解实现过程

    SpringBoot集成tomcat详解实现过程

    采用spring boot之后,一切变得如此简单,打包->java-jar->运维,只需要一个jar包便可以随意部署安装。这篇文章,将对 spring boot集成tomcat的源码进行分析,探索其内部的原理
    2023-02-02
  • 关于@Bean的使用方式

    关于@Bean的使用方式

    这篇文章主要介绍了关于@Bean的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • SpringBoot项目配置明文密码泄露问题的处理方式

    SpringBoot项目配置明文密码泄露问题的处理方式

    这篇文章主要介绍了SpringBoot项目配置明文密码泄露问题的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Javaweb使用cors完成跨域ajax数据交互

    Javaweb使用cors完成跨域ajax数据交互

    本文由跨域、cors的概念开始,进而向大家介绍了Javaweb使用cors完成跨域ajax数据交互的相关内容,需要的朋友可以了解下。
    2017-09-09
  • Springboot文件上传出现找不到指定系统路径的解决

    Springboot文件上传出现找不到指定系统路径的解决

    这篇文章主要介绍了Springboot文件上传出现找不到指定系统路径的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 基于Springboot2.3访问本地路径下静态资源的方法(解决报错:Not allowed to load local resource)

    基于Springboot2.3访问本地路径下静态资源的方法(解决报错:Not allowed to load local

    这篇文章主要介绍了基于Springboot2.3访问本地路径下静态资源的方法(解决报错:Not allowed to load local resource),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • idea如何配置javafxsdk详细教程

    idea如何配置javafxsdk详细教程

    这篇文章主要介绍了idea如何配置javafxsdk,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习火锅工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Springboot实现图片上传功能的示例代码

    Springboot实现图片上传功能的示例代码

    本篇文章主要介绍了SpringBoot如何实现图片上传功能,文中通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-09-09
  • libsvm支持向量机回归示例

    libsvm支持向量机回归示例

    这篇文章主要介绍了libsvm支持向量机回归示例,需要的朋友可以参考下
    2014-05-05
  • 使用hutool进行ftp文件下载和上传详细代码示例

    使用hutool进行ftp文件下载和上传详细代码示例

    在开发Java项目时,FTP客户端是经常需要使用的工具,因为FTP协议在文件传输方面有着广泛的应用,这篇文章主要给大家介绍了关于使用hutool进行ftp文件下载和上传的相关资料,需要的朋友可以参考下
    2024-02-02

最新评论