使用abstract格式修饰抽象方法

 更新时间:2023年05月24日 14:26:18   作者:让你五行代码  
abstract是抽象的意思,用于修饰方法方法和类,修饰的方法是抽象方法,修饰的类是抽象类,这篇文章主要介绍了怎样使用abstract格式修饰抽象方法,需要的朋友可以参考下

父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了(因为子类对象会调用自己重写的方法)。换句话说,父类可能知道子类应该有哪个功能,但是功能具体怎么实现父类是不清楚的(由子类自己决定),父类只需要提供一个没有方法体的定义即可,具体实现交给子类自己去实现。我们把没有方法体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类。

抽象方法 : 没有方法体的方法。

抽象类:包含抽象方法的类。

抽象方法和abstract

abstract是抽象的意思,用于修饰方法方法和类,修饰的方法是抽象方法,修饰的类是抽象类。

使用abstract关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体,具体定义格式如下:

java
修饰符 abstract 返回值类型 方法名 (参数列表);

代码举例:

java
public abstract void run();

抽象类

如果一个类包含抽象方法,那么该类必须是抽象类。注意:抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象类。

抽象类的定义格式如下:

java
abstract class 类名字 { 
}

代码举例:

java
public abstract class Animal {
    public abstract void run();
}

继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。代码举例:

java
// 父类,抽象类
abstract class Employee {
    private String id;
    private String name;
    private double salary;
    public Employee() {
    }
    public Employee(String id, String name, double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }
    // 抽象方法
    // 抽象方法必须要放在抽象类中
    abstract public void work();
}
// 定义一个子类继承抽象类
class Manager extends Employee {
    public Manager() {
    }
    public Manager(String id, String name, double salary) {
        super(id, name, salary);
    }
    // 2.重写父类的抽象方法
    @Override
    public void work() {
        System.out.println("管理其他人");
    }
}
// 定义一个子类继承抽象类
class Cook extends Employee {
    public Cook() {
    }
    public Cook(String id, String name, double salary) {
        super(id, name, salary);
    }
    @Override
    public void work() {
        System.out.println("厨师炒菜多加点盐...");
    }
}
// 测试类
public class Demo10 {
    public static void main(String[] args) {
        // 创建抽象类,抽象类不能创建对象
        // 假设抽象类让我们创建对象,里面的抽象方法没有方法体,无法执行.所以不让我们创建对象
//        Employee e = new Employee();
//        e.work();
        // 3.创建子类
        Manager m = new Manager();
        m.work();
        Cook c = new Cook("ap002", "库克", 1);
        c.work();
    }
}

此时的方法重写,是子类对父类抽象方法的完成实现,我们将这种方法重写的操作,也叫做实现方法。

抽象类的特征

抽象类的特征总结起来可以说是有得有失

有得:抽象类得到了拥有抽象方法的能力。

有失:抽象类失去了创建对象的能力。

其他成员(构造方法,实例方法,静态方法等)抽象类都是具备的。

抽象类的细节

关于抽象类的使用,以下为语法上要注意的细节,虽然条目较多,但若理解了抽象的本质,无需死记硬背。

1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

子类的构造方法中,有默认的super(),需要访问父类构造方法。

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

未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。

4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过而报错。

假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。

5. 抽象类存在的意义是为了被子类继承。

抽象类中已经实现的是模板中确定的成员,抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现。

抽象类存在的意义:抽象类存在的意义是为了被子类继承,否则抽象类将毫无意义。抽象类可以强制让子类,一定要按照规定的格式进行重写。

到此这篇关于怎样使用abstract格式修饰抽象方法?的文章就介绍到这了,更多相关abstract格式修饰抽象方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 设计模式之原型模式_动力节点Java学院整理

    设计模式之原型模式_动力节点Java学院整理

    这篇文章主要介绍了设计模式之原型模式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • java程序员如何编写更好的单元测试的7个技巧

    java程序员如何编写更好的单元测试的7个技巧

    测试是开发的一个非常重要的方面,可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题,但较差的测试往往总是导致故障和停机。本文主要介绍java程序员编写更好的单元测试的7个技巧。下面跟着小编一起来看下吧
    2017-03-03
  • SpringBoot集成消息队列的项目实践

    SpringBoot集成消息队列的项目实践

    本文主要介绍了SpringBoot集成消息队列的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • iBatis习惯用的16条SQL语句

    iBatis习惯用的16条SQL语句

    iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快.这篇文章主要介绍了iBatis习惯用的16条SQL语句的相关资料,需要的朋友可以参考下
    2016-10-10
  • 深入解析Java多态进阶学习

    深入解析Java多态进阶学习

    java的动态绑定机制非常重要。这篇文章将带大家更深入的学习一下Java的多态,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下
    2022-07-07
  • MAVEN_HOME、M2_HOME,maven环境变量设置方式

    MAVEN_HOME、M2_HOME,maven环境变量设置方式

    这篇文章主要介绍了MAVEN_HOME、M2_HOME,maven环境变量设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • IDEA设置多行展示导航栏方式

    IDEA设置多行展示导航栏方式

    在IDEA中开启多行导航栏可以增加工作效率,具体操作步骤包括访问“File”,进入“Settings”,选择“Editor”后修改“EditorTabs”设置中的“Show tabs in one row”选项,取消勾选后保存即可,这使得在打开多个文件时,导航栏可以显示更多标签,便于管理和查看代码
    2024-09-09
  • 重新理解Java泛型

    重新理解Java泛型

    这篇文章主要介绍了重新理解Java泛型,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Struts2学习笔记(3)-DMI动态调用方式

    Struts2学习笔记(3)-DMI动态调用方式

    本文主要介绍Struts2的DMI动态调用的两种方式,简单实用,希望能给大家做一个参考。
    2016-06-06
  • spring使用三级缓存解决循环依赖的情况

    spring使用三级缓存解决循环依赖的情况

    Spring 2.6后默认禁用循环依赖,启动时报错;可通过@Lazy注解或配置启用,三级缓存分别存储完整Bean、部分注入对象和未注入对象,解决依赖注入问题
    2025-09-09

最新评论