JAVA学习*抽象类

news2025/7/13 12:30:26

抽象类

在Java中,被abstract关键字修饰的类被称为抽象类。

特点

1、当一个类继承了抽象类,一定要重写抽象方法!!!

public abstract class Animal {
    public int age;
    public String name;
	//抽象方法
    public abstract void func();
    //普通类方法
    public void test() {
        System.out.println("调用Animal类的test()");
    }
}
public class Bird extends Animal {
//重写抽象方法
    @Override
    public void func() {
        System.out.println(this.name+"可以飞!");
    }
}
public class Fish extends Animal{
    @Override
    public void func() {
        System.out.println(this.name+"可以游泳!");
    }
}
public class Dog extends Animal{
    @Override
    public void func() {
        System.out.println(this.name+"可以狗刨!");
    }
}

注意:
1、抽象方法是有abstract关键字的方法,并且没有函数体,以分号结尾。

//eg.
public abstract void func();

2、当子类没有重写抽象类时,会报错。
在这里插入图片描述
这里提示要么声称Bird类为抽象类,要么重写func()抽象方法。
3、当抽象类继承了抽象类,此时子类抽象类可以不用重写,子类抽象类的子类一定要把所有的抽象方法都重写了!
例如:

public abstract class Animal {
    public int age;
    public String name;

    public abstract void func();
    public void test() {
        System.out.println("调用Animal类的test()");
    }
}
public abstract class AbstractBird extends Animal{
    public abstract void test();
}
public class Bird extends AbstractBird {
    @Override
    public void func() {
        System.out.println(this.name+"可以飞!");
    }

    @Override
    public void test() {
        System.out.println("测试");
    }
}

在Bird类中一定要重写func()和test()抽象方法。

2、抽象类不能实例化对象

在这里插入图片描述

3、抽象方法不能是static、final、private方法

因为static、final、private方法是不能被重写的,而抽象类一定要重写。

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

在这里插入图片描述

5、抽象类中可以有构造方法

public abstract class Animal {
    public int age;
    public String name;

    public Animal(int age, String name) {
        this.age = age;
        this.name = name;
        System.out.println("调用Animal类构造方法");
    }

    public abstract void func();
    public void test() {
        System.out.println("调用Animal类的test()");
    }
}
public class Bird extends Animal {
    @Override
    public void func() {
        if(this.name!=null){
            System.out.println(this.name+"可以飞!");
        } else {
            System.out.println("name为空");
        }
    }

    public Bird(int age, String name) {
        super(age, name);
        System.out.println("调用Bird类构造方法");
    }
}
public class Test {
    public static void main(String[] args) {
        Bird bird = new Bird(2,"黑子");
        bird.func();
        System.out.println("-----------");
        Animal animal = new Bird(1,"白白");//发生向上转型
        animal.func();//发生多态,调用子类func()方法。
    }
}

会先调用父类的构造方法来初始化父类的成员变量,然后再调用子类的构造方法,最后执行子类实现的抽象方法。

输出:
调用Animal类构造方法
调用Bird类构造方法
黑子可以飞!

调用Animal类构造方法
调用Bird类构造方法
白白可以飞!

抽象类的意义

1、抽象类不能实例化,其他的很多都和普通类差不多,通过定义抽象类能帮助我们检测需要由子类完成的方法是否被重写了,编译器会自动检查。
2、虽然抽象类不能实例化,但我们仔细想想,世界上并不存在叫Animal这个生物,这并不需要实例化。抽象类有点像一些事物的共性的总结,普遍性与特殊性的关系。用于对具有相似特征和行为的一类事物进行抽象、概括、总结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2317712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库管理-第303期 数据库相关硬件文章汇总(20250319)

数据库管理303期 2025-03-19 数据库管理-第303期 数据库相关硬件文章汇总(20250319)1 CPU & 内存2 SSD3 RDMA4 存储5 CXL6 硬件采购7 数据库一体机总结 数据库管理-第303期 数据库相关硬件文章汇总(20250319) 作者&#xff1…

OctoTools:一个具有复杂推理可扩展工具的智体框架

25年2月来自斯坦福大学的论文“OctoTools: An Agentic Framework with Extensible Tools for Complex Reasoning”。 解决复杂的推理任务可能涉及视觉理解、域知识检索、数值计算和多步骤推理。现有方法使用外部工具增强大语言模型 (LLM),但仅限于专业领域、有限的…

Canary

定义: Canary是一种用以防护栈溢出的保护机制。 原理: 是在一个函数的入口处,先从fs/gs寄存器中取出一个4字节(eax,四字节通常是32位的文件)或者8字节(rax,通常是64位的文件)的值…

c++领域展开第十七幕——STL(vector容器的模拟实现以及迭代器失效问题)超详细!!!!

文章目录 前言vector——基本模型vector——迭代器模拟实现vector——容量函数以及push_back、pop_backvector——默认成员函数vector——运算符重载vector——插入和删除函数vector——实现过程的问题迭代器失效memcpy的浅拷贝问题 总结 前言 上篇博客我们已经详细介绍了vecto…

BUUCTF Pwn babyheap_0ctf_2017 Unsorted bin attack部分

checksec exeinfo 开启了全保护 64位 查看函数: 堆题 增删查改齐了 可以在编辑堆的时候重新设置大小 存在堆溢出 delete函数的指针清零了 无UAF 想法是通过unsorted bin泄露libc基址: from pwn import *p process(./babyheap) #p remote("node…

【C++指南】内存管理完全手册:new/delete

🌟 各位看官好,我是egoist2023! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C内存管理的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享…

Vue3组合式函数(滚动监测 useScroll)

主要用于实时监测目标元素滚动位置及状态 工具函数源码 /*** 组合式函数* 实时监测目标元素滚动位置及状态** 自定义钩子用于处理滚动事件和状态* param target 滚动目标元素,可以是 Ref、HTMLElement、Window 或 Document,默认为 window* param throt…

Vue.js+Element UI 登录界面开发详解【附源码】

成果图: 一、技术架构解析 本登录模块采用前后端分离架构,前端基于Vue.jsElement UI实现交互逻辑,主要包含以下技术要点: ​组件化开发 - 采用单文件组件形式组织代码​响应式设计 - 实现多终端适配​状态管理 - 使用sessionSto…

瑞幸需要宇树科技

吃不到“星巴克红利”,瑞幸活成“Manner”。 作者|古廿 编辑|杨舟 “是不是又要开始3月革命了。”有瑞幸员工透露,今年开始瑞幸加强了系统排班的执行力度。新的排班体系下,要求各时段门店实际值班人员和排班系统一致。如果需要调整&#xf…

linux 命令 vim

以下是 Linux 中 Vim 编辑器的核心命令总结,分为基础操作、高效编辑技巧和实用场景,助你快速掌握 1. 启动与退出 命令说明vim 文件名打开或新建文件vim 行号 文件名打开文件并跳转到指定行(如 vim 10 file.txt):q退出 Vim&#…

解决MySQL字符集冲突引发的“Illegal mix of collations”错误

引言 在开发过程中,我们常常会遇到数据库层面的字符集兼容性问题。本文将通过一个典型的案例,分析因字符集不匹配导致的 Illegal mix of collations 错误,并提供完整的解决方案,帮助开发者彻底规避此类问题。 问题现象 假设我们…

Vue中的publicPath释义

publicPath 部署应用包时的基本URL。用法和 webpack 本身的 output.publicPath 一致,但是 Vue CLI 在一些其他地方也需要用到这个值,所以请始终使用 publicPath 而不要直接修改 webpack 的 output.publicPath。 默认情况下,Vue CLI 会假设你…

新造车不再比拼排名,恰是曲终人散时,剩者为王

据称新能源汽车周销量不再发布,这可能也预示着新造车终于到了给出答案的时候了,新造车企业前三强已基本确立,其余那些落后的车企已很难有突围的机会,而特斯拉无疑是其中的最大赢家。 3月份第一周的数据显示,销量最高的…

博客迁移----宝塔面板一键迁移遇到问题

前景 阿里云轻量级服务器到期了,又免费领了个ESC, 安转了宝塔面板。现在需要迁移数据,使用宝塔面板一键迁移功能,完成了数据的迁移,改了域名的解析,现在进入博客是显示502 bad grateway 宝塔搬家参考链接…

大数据处理最容易的开源平台

大数据处理最容易的开源平台可以从多个角度进行分析,包括易用性、灵活性、成本效益以及社区支持等方面。 Apache Spark Apache Spark 是一个广泛使用的开源大数据处理框架,以其快速、通用和易于使用的特点而著称。它支持多种编程语言(如 Scal…

Dify 使用 - 创建 翻译 工作流

文章目录 1、选择 模板2、设置 和 基本使用3、运行应用 1、选择 模板 2、设置 和 基本使用 翻译模板 自带了系统提示词,你也可以修改 3、运行应用 右上角 点击 发布 – 更新,运行应用,就可以在新的对话界面中使用此功能 2025-03-18&#x…

TreelabPLMSCM数字化供应链解决方案0608(61页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读:TreelabPLMSCM 数字化供应链解决方案 0608 在当今快速变化的市场环境中,企业面临着诸多挑战,Treelab 数智化 PLM_SCM 行业解决方案应运而生。该方案聚焦市场趋势与行业现状,致力于解…

LogicFlow介绍

LogicFlow介绍 LogicFlow是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow支持前端自定义开发各种逻辑编排场景,如流程图、ER图、BPMN流程等。在工作审批流配置、机器人逻辑编排、无代码平…