服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java超详细介绍抽象类与接口的使用

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

2022-12-08 14:34xaiobit_hl Java教程

在类中没有包含足够的信息来描绘一个具体的对象,这样的类称为抽象类,接口是Java中最重要的概念之一,它可以被理解为一种特殊的类,不同的是接口的成员没有执行体,是由全局常量和公共的抽象方法所组成,本文给大家介绍

1.抽象类的语法和特性

1.1语法

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

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

1.2特性

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

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

2. 抽象方法不能是 private 的

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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关键字即可。

?
1
2
3
4
5
6
public interface IOperation {
    public abstract void method1();
    public void method2();
    abstract void method3();
    void method4();
}

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

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

2.2特性

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)关系

?
1
2
3
4
5
6
public interface IOperation {
}
class A implements IOperation {
}
interface Io extends IOperation {
}

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

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

?
1
2
3
4
5
public interface IOperation {
    private void method() {
    }
    //编译报错
}

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

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

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

?
1
2
3
4
5
6
7
8
9
10
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. 接口中不能有静态代码块和构造方法

?
1
2
3
4
5
6
7
8
interface USB {
    // 编译失败:接口中不能有构造方法
    public USB(){
    }
    {} // 编译失败:接口中不能有实例代码块
    void openDevice();
    void closeDevice();
}

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

原文链接:https://blog.csdn.net/xaiobit_hl/article/details/124562282

延伸 · 阅读

精彩推荐
  • Java教程SSH框架实现表单上传图片实例代码

    SSH框架实现表单上传图片实例代码

    本篇文章主要介绍了SSH框架实现表单上传图片实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    暖心先森8612020-12-30
  • Java教程利用Java异常机制实现模拟借书系统

    利用Java异常机制实现模拟借书系统

    这篇文章主要给大家介绍了利用Java异常机制实现模拟借书系统的相关资料,文中先对java异常机制进行了简单介绍,而后通过示例代码介绍了java语言是如何...

    胡博靖3742020-09-19
  • Java教程深入解析Java中的Class Loader类加载器

    深入解析Java中的Class Loader类加载器

    这篇文章主要介绍了Java中的类加载器,是Java入门学习中的基础知识,需要的朋友可以参考下 ...

    Radic_Feng3562020-04-11
  • Java教程spring mvc中的@ModelAttribute注解示例介绍

    spring mvc中的@ModelAttribute注解示例介绍

    在Spring mvc中,注解@ModelAttribute是一个非常常用的注解,下面这篇文章主要给大家介绍了关于spring mvc中@ModelAttribute注解的相关资料,文中通过示例代码介绍...

    沈子平5182020-12-28
  • Java教程深入浅析JSON在java中的使用

    深入浅析JSON在java中的使用

    这篇文章主要介绍了JSON在java中的使用,包括javaBean和json的互转,List 和 json 的互转及map 和 json 的互转,本文通过实例代码给大家介绍的非常详细,对大家...

    煎丶包8292021-09-12
  • Java教程Java魔法堂之调用外部程序的方法

    Java魔法堂之调用外部程序的方法

    这篇文章主要介绍了Java魔法堂:调用外部程序的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下...

    ^_^肥仔John9252021-08-08
  • Java教程一篇超详细的SpringBoot整合MybatisPlus的文章

    一篇超详细的SpringBoot整合MybatisPlus的文章

    这篇文章主要介绍了springboot整合Mybatis-plus的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    牛哄哄的柯南5112021-10-24
  • Java教程Java程序设计之12个经典样例

    Java程序设计之12个经典样例

    这篇文章主要给大家分享关于Java程序设计11个经典样例,主要以举例的形式详细的讲解了Java程序设计的各种方法,需要的朋友可以参考一下文章具体的内容...

    zhulin10287012022-02-28