【Java】抽象类

news2024/9/20 16:42:28

目录

概述:

示例代码:

抽象类特点

 示例代码:


概述:

在Java中,一个没有 方法体 的方法应该定义为 抽象方法,而类中如果有 抽象方法,该类必须定义为抽象类。

抽象类和抽象方法用 abstract 关键字来修饰

  • 抽象类:abstract class 类名{}
  • 抽象方法:public abstract void eat();// 抽象方法中没有方法体 

 

示例代码:

AnimalParent.java

package com.面向对象.Demo24;

//public class AnimalParent {
public abstract class AnimalParent {
    /**
     * eat()方法没有方法体 具体 都是交给子类 重写的
     * 如果在方法上加上 abstract 进行修饰 为抽象方法
     * 如果在一个类中存在一个抽象方法 则该类必须是抽象方法
     */
//    public void eat(){
//        System.out.println("我在吃");
//    }
    public abstract void eat();
}

Cat.java

package com.面向对象.Demo24;

public class Cat extends AnimalParent {
    // 在我们抽象类中  的抽象方法 子类必须是要重写的
    @Override
    public void eat() {
        System.out.println("Cat-eat()-鱼");
    }
}

Dog.java

package com.面向对象.Demo24;

public class Dog extends AnimalParent{
    // 在我们抽象类中  的抽象方法 子类必须是要重写的
    @Override
    public void eat() {
        System.out.println("Dog-eat()-骨头");
    }
}

Test01.java

package com.面向对象.Demo24;

public class Test01 {
    public static void main(String[] args) {
//        AnimalParent animalParent = new AnimalParent(); //报错,'AnimalParent' is abstract; cannot be instantiated
        // 动物类是一个抽象的概念 没有具体的事物

        AnimalParent dog = new Dog();
        AnimalParent cat = new Cat();
        dog.eat(); //Dog-eat()-骨头
        cat.eat(); //Cat-eat()-鱼
    }
}

抽象类特点

  1. 抽象类中不一定有抽象方法,但是有抽象方法的类必须为抽象类;
  2. 抽象类不能实例化;
  3. 抽象类由具体的子类进行实例化;
  4. 子类必须对父类(抽象类)中的所有抽象方法进行重写;
  5. 在抽象类中可以定义非抽象方法;
  6. 子类如果不重写抽象类中的抽象方法,则该类还是为抽象类;
  7. 抽象类中可以有构造方法,用于子类访问父类时的数据初始化。

 示例代码:

AnimalParent.java

package com.面向对象.Demo25;

public abstract class AnimalParent {
    /**
     * 在抽象类中 是可以定义 成员属性
     */
    private int age;
    private final int code = 200;

    /**
     * 1.在方法上加上 abstract 进行修饰,则该方法是为抽象方法
     * (如果在该类中存在一个抽象方法,则该类必须是为抽象类)
     * 2.在一个抽象类中是可以存在多个抽象方法的
     * 3.在抽象类 可以定义 非抽象方法
     * 4.子类是必须重写父类中 所有 的抽象方法 (非抽象方法 子类没有必须 强制 重写的)
     * 5.如果子类 没有重写 父类中的抽象方法,则该类 也需要是为 "抽象类" 继承父类中的抽象方法
     * 6.抽象类——不能够实例化的 没有明确具体的事物 所以 抽象类必须 通过子类 实例化
     * 7.在抽象类中,不一定有抽象方法的(但是这样做不合理)
     * 8.抽象类中可以有构造方法,用于子类访问父类时的数据初始化。
     */
    public abstract void eat();

    public abstract void play();

    public AnimalParent() {
        System.out.println("AnimalParent-无参构造方法...");
    }
    // 抽象类 是可以定义 有参构造方法,子类访问父类初始化时 可以给父类的成员属性进行赋值
    public AnimalParent(int age) {
        this.age = age;
        System.out.println("AnimalParent-有参构造方法...");
    }

    /**
     * 非抽象方法(子类不需要强制重写的)
     */
    public void show() {
        System.out.println("非抽象方法-show()");
        System.out.println("age:"+age);
        System.out.println("code:"+code);
    }
}

Dog.java

package com.面向对象.Demo25;

public class Dog extends AnimalParent {
    /**
     * 默认每个类中都有一个无参构造方法 默认是可以不用写的
     */
    public Dog(int age) {
        super(age); //如果这里调用父类的有参构造方法,程序会默认在这里加上 super(),帮我们调用无参构造
        // 思考 在Dog类中 的有参构造方法中,会调用父类中的 有参构造方法吗?
        System.out.println("Dog-有参构造方法...");
    }

    @Override
    public void eat() {
        System.out.println("Dog-eat-骨头");
    }

    @Override
    public void play() {
    }
}

Cat.java

package com.面向对象.Demo25;

// 如果子类 没有重写 父类中的抽象方法,则该类 也需要是为 "抽象类" 继承父类中的抽象方法
public abstract class Cat extends AnimalParent{
}

Test01.java

package com.面向对象.Demo25;

public class Test01 {
    public static void main(String[] args) {
//        new AnimalParent();//报错,'AnimalParent' is abstract; cannot be instantiated
        // 抽象类 没有明确具体的事物 所以 抽象类必须 通过子类 实例化

        AnimalParent dog = new Dog(20);
        dog.show();
//        AnimalParent cat = new Cat();//报错,∵ Cat类是 abstract
    }
}

下一篇文章:抽象类案例

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

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

相关文章

基于Java的志愿者活动宣传管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

再来介绍另一个binlog文件解析的第三方工具my2sql

看腻了文字就来听听视频演示吧:https://www.bilibili.com/video/BV1rp4y1w74B/ github项目:https://github.com/liuhr/my2sql gitee链接:https://gitee.com/mirrors/my2sql my2sql go版MySQL binlog解析工具,通过解析MySQL bin…

vertx的学习总结7

这里我就简单的聊几句&#xff0c;如何用vertx web来搞一个web项目的 1、首先先引入几个依赖&#xff0c;这里我就用maven了&#xff0c;这个是kotlinvertx web <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apac…

Linux基本指令介绍系列第四篇

文章目录 前言一、Linux基本指令介绍1、more指令2、less指令3、head指令4、tail指令5、bc指令6、管道文件介绍7、与时间相关的指令 总结 前言 本文介绍Linux使用时的部分指令&#xff0c;读者如果想了解更多基本指令的使用&#xff0c;可以关注博主的后续的文章。 博主使用的实…

基于Java的在线听书网站设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

阿里云服务器搭建网站(图文新手教程)

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程&#xff1a; …

【Zookeeper专题】Zookeeper特性与节点数据类型详解

目录 前言前置知识课程内容一、Zookeeper介绍二、Zookeeper快速开始2.1 Zookeeper安装2.2 客户端命令行操作2.3 GUI工具 三、Zookeeper数据结构3.1 ZNode节点分类3.2 ZNode状态信息3.3 监听机制详解3.3.1 永久性Watch 3.4 节点ZNode特性总结3.5 应用场景详解3.5.1 统一命名服务…

大模型部署手记(7)LLaMA2+Jetson AGX Orin

1.简介 组织机构&#xff1a;Meta&#xff08;Facebook&#xff09; 代码仓&#xff1a;GitHub - facebookresearch/llama: Inference code for LLaMA models 模型&#xff1a;llama-2-7b、llama-2-7b-chat 下载&#xff1a;使用download.sh下载 硬件环境&#xff1a;Jetso…

字符函数和字符串函数(下)

目录 strncpy(Copy characters from string)函数的使用strncat(Append characters from string)函数的使用strncmp(Compare characters of two strings)函数的使用strstr(Locate substring)的使用和模拟实现 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &am…

【HUAWEI】VLAN+OSPF+单臂路由

目录 &#x1f96e;写在前面 &#x1f96e;3.1、拓扑图 &#x1f96e;3.2、操作思路 &#x1f96e;3.3、配置操作 &#x1f363;3.3.1、LSW2配置 &#x1f363;3.3.2、LSW3配置 &#x1f363;3.3.3、R1配置 &#x1f363;3.3.4、R2配置 &#x1f363;3.3.5、LSW1配置 &#x1f…

<二>Qt斗地主游戏开发:过场动画的实现

1. 过场动画效果 2. 思路分析 过场动画较为简单&#xff0c;只有一个进度条在进行滚动&#xff0c;因此实现起来不需要动画相关处理&#xff0c;仅需要图片和定时器设定&#xff0c;让进度条动起来即可。我们可以创建一个对话框&#xff0c;设定背景图片以及对话框透明无边框&a…

【数据结构初阶】七、非线性表里的二叉树(堆的实现 -- C语言顺序结构)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【数据结构初阶】六、线性表中的队列&#xff08;链式结构实现队列&#xff09;-CSDN博客 1 . 非线性表里的 树(Tree) 树的概念及结构&#xff1a; 树的概念 树是一种非线性的数据…

“牛市陷阱?还是回调?是好?还是坏!“

比特币六年来首次在9月实现正回报 比特币回调:发生了什么以及接下来会发生什么? 美元的主导地位&#xff1a;揭示美元涟漪效应 长期持有者持有的比特币供应比例正式达到历史新高 比特币六年来首次在9月实现正回报 随着 10 月份的到来&#xff0c;比特币6年来首次在9月份实…

图像上传功能实现

一、后端 文件存放在images.path路径下 package com.like.common;import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annot…

交通物流模型 | 基于时空注意力融合网络的城市轨道交通假期短时客流预测

短时轨道交通客流预测对于交通运营管理非常重要。新兴的深度学习模型有效提高了预测精度。然而,大部分现有模型主要针对常规工作日或周末客流进行预测。由于假期客流的突发性和无规律性,仅有一小部分研究专注于假期客流预测。为此,本文提出一个全新的时空注意力融合网络(ST…

微信公众号怎么把个人改成企业?

公众号迁移有什么作用&#xff1f;只能变更主体吗&#xff1f;很多小伙伴想做公众号迁移&#xff0c;但是不知道公众号迁移有什么作用&#xff0c;今天跟大家具体讲解一下。首先公众号迁移最主要的就是修改公众号的主体了&#xff0c;比如我们公众号原来是A公司的&#xff0c;现…

Go 语言内置类型全解析:从布尔到字符串的全维度探究

目录 一、布尔类型定义基础用法声明与初始化逻辑运算 进阶用法条件语句循环结构函数返回值 常见错误与陷阱 二、整数类型定义基础用法声明与初始化运算符位运算 进阶用法数据溢出类型转换类型推断 特殊整数类型runebyte 常见问题和陷阱 三、浮点数类型定义基础用法声明与初始化…

IBT机考-PBT笔考,优劣分析,柯桥口语学习,韩语入门,topik考级韩语

IBT机考&#xff0c;顾名思义就是在电脑上答题考试&#xff0c;区别于现在的PBT纸笔答题&#xff0c;不需要发卷、收卷&#xff0c;也不需要填涂和用笔写字。 考试不需要带任何文具&#xff0c;就连笔试要用到的修正带都将省去。因为听力、阅读的选择题都是用鼠标点击&#xf…

深入了解 RabbitMQ:高性能消息中间件

目录 引言&#xff1a;一、RabbitMQ 介绍二、核心概念三、工作原理四、应用场景五、案例实战 引言&#xff1a; 在现代分布式系统中&#xff0c;消息队列成为了实现系统间异步通信、削峰填谷以及解耦组件的重要工具。而RabbitMQ作为一个高效可靠的消息队列解决方案&#xff0c;…

eNSP网络实验

二层VLAN 四台PC的IP地址如图所示&#xff0c;子网掩码均为255.255.255.0&#xff0c;四台PC处在同一个局域网之中&#xff0c;在配置VLAN之前能够彼此ping通。配置的目的是将PC1和PC3划分到VLAN10中&#xff0c;PC2和PC4划分到VLAN20中。 在配置之前需要进入系统视角。 创建V…