java面向对象进阶进阶篇--《抽象类和抽象方法》

个人主页VON

所属专栏java从入门到起飞

 

目录

个人主页​编辑我的主页​编辑

一、简介

抽象方法:

抽象类:

概述:

二、抽象类

特点和用途

示例:

Animal类

 Dog类

 Flog类

Sheep类

Text类

结果展示:

三、抽象方法

特点和用途

示例:

注意事项


一、简介

抽象方法:

抽象方法是没有方法体的方法,只有方法声明(方法名、参数列表、返回类型)。使用 abstract 关键字声明。

抽象类:

抽象类是用 abstract 关键字声明的类,不能直接实例化对象,主要用于被继承。

概述:

抽象方法和抽象类是面向对象编程中用于实现抽象和多态性的重要概念。抽象方法用于定义接口规范,由子类实现具体行为;抽象类则为子类提供了部分实现,并约束子类必须实现的方法。通过抽象方法和抽象类,Java可以更灵活地组织和设计代码结构,提高代码的可维护性和扩展性。

二、抽象类

抽象类(Abstract Class)是Java中一种特殊的类,它不能被实例化,即不能直接创建对象。其主要目的是为了被继承,子类可以通过扩展抽象类来实现其定义的抽象方法和非抽象方法。

特点和用途

  • 不能被实例化:抽象类不能直接创建对象,只能被用作其他类的父类。

  • 包含抽象方法:抽象类中可以包含抽象方法(没有方法体的方法),这些方法必须在子类中被实现(即重写)才能使用。

  • 可以有普通方法:抽象类不仅可以包含抽象方法,还可以包含具体实现的普通方法。子类继承抽象类时,可以选择性地覆盖这些方法。

  • 用于类的继承:通过继承抽象类,子类可以获得父类的结构和行为,同时根据需要实现父类定义的抽象方法,从而实现多态性和代码复用。

示例:

 注:使用抽象类时要使用抽象方法

Animal类

package com.von.day14;public abstract class Animal {private String name;private int age;public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void drink(){System.out.println("动物在喝水");}public abstract void eat();
}

 Dog类

package com.von.day14;public class Dog extends Animal{public Dog() {}public Dog(String name, int age) {super(name, age);}@Overridepublic void eat(){System.out.println("狗吃骨头");}
}

 Flog类

package com.von.day14;public class Frog extends Animal{public Frog() {}public Frog(String name, int age) {super(name, age);}@Overridepublic void eat(){System.out.println("青蛙吃虫");}
}

Sheep类

package com.von.day14;public class Sheep extends Animal{public Sheep() {}public Sheep(String name, int age) {super(name, age);}@Overridepublic void eat(){System.out.println("山羊吃草");}
}

Text类

package com.von.day14;public class text {public static void main(String[] args) {Frog f=new Frog("张三",18);System.out.println(f.getName()+","+f.getAge());f.drink();f.eat();Dog d=new Dog("李四",19);System.out.println(d.getName()+","+d.getAge());d.drink();d.eat();Sheep s=new Sheep("王五",20);System.out.println(s.getName()+","+s.getAge());s.drink();s.eat();}
}

结果展示:

三、抽象方法

抽象方法(Abstract Method)是Java中定义在抽象类或者接口中的方法,它没有方法体,只有方法签名(包括方法名、参数列表和返回类型)。抽象方法必须在子类中被重写(实现),否则这些子类也必须声明为抽象类。

特点和用途

  • 没有方法体:抽象方法没有方法体,即不包含方法的具体实现。

  • 必须在抽象类或接口中:抽象方法只能存在于抽象类或接口中。抽象类可以包含抽象方法和具体方法,而接口中的方法默认都是抽象方法。

  • 强制子类实现:子类继承抽象类或实现接口时,必须实现其中的抽象方法,否则子类也必须声明为抽象类。

  • 多态性:抽象方法的存在使得多态性得以实现。通过父类或接口的引用指向子类对象,可以调用子类实现的抽象方法,实现不同对象的不同行为。

示例:

// 抽象类
abstract class Animal {// 抽象方法,没有方法体abstract void makeSound();// 普通方法,有方法体void eat() {System.out.println("Animal is eating");}
}// 子类继承抽象类并实现抽象方法
class Dog extends Animal {// 实现抽象方法void makeSound() {System.out.println("Dog barks");}
}// 另一个子类也可以继承抽象类并实现抽象方法
class Cat extends Animal {// 实现抽象方法void makeSound() {System.out.println("Cat meows");}
}public class Main {public static void main(String[] args) {Animal dog = new Dog(); // 使用多态性,编译时类型为Animal,运行时类型为Dogdog.makeSound(); // 调用子类实现的抽象方法dog.eat(); // 调用继承的普通方法Animal cat = new Cat(); // 同样可以使用多态性cat.makeSound();cat.eat();}
}

注意事项

  • 抽象方法不能被声明为私有(private),因为私有方法不能被子类重写。
  • 如果一个类包含抽象方法,那么该类必须声明为抽象类(使用 abstract 关键字)。但是,抽象类中可以包含普通方法。
  • 抽象方法在子类中必须被实现,除非子类也是抽象类。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL

SQL全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 。 SQL通用语法 SQL语句可以单行或多行书写,以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。MySQL数据库的…

Linux环境下安装配置jdk和maven

一、jdk下载 Oracle的JDK开始收费了,如非必要,请勿使用!!! jdk下载地址1(推荐)https://github.com/graalvm/graalvm-ce-builds/releases jdk下载地址2(可选):…

Mac安装Hoomebrew与升级Python版本

参考 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装了Python 3.x版本,你可以使用以下命令来设置默认的Python版本: # 首先找到新安…

防火墙——网络环境支持

目录 网络环境支持 防火墙的组网 web连接上防火墙 web管理口 让防火墙接到网络环境中 ​编辑 管理员用户管理 缺省管理员 接口 配置一个普通接口 创建安全区域 路由模式 透明模式 混合模式 防火墙的安全策略 防火墙转发流程 与传统包过滤的区别 创建安全策略 …

神经网络新范式——LNDP:可终身学习的自主发育程序

近年来人工智能的高速发展离不开深度神经网络的应用,深度神经网络的发展是从大数据和硬件算力设备大规模发展之后才逐渐占据了人工智能的核心研究地位的,在此之前人工智能的研究都是以可解释性强、计算力小的统计学模型为主,但是以统计学为主…

c生万物系列(封装)

为了对c语言进行封装,笔者参考了lw_oopc等开源库,决定使用宏对结构体进行封装。 先说一下大致思想:通过宏,结构体和文件来实现封装。 大概步骤:抽象出类-> 使用lw_oopc库进行封装->定义接口封装底层实现 ->…

【概率论】-2-概率论公理(Axioms of Probability)

上一篇文章我们学习了基本的概率论内容-排列组合,本次我们学习概率论公理的内容,正式开始计算概率,在开始前我们需要学习一些基本概念。 目录 一.样本空间和事件 1.样本空间 2.事件 3.交并补 二、概率公理 1.基本公理 2.对称差 2.布尔…

【Docker】Docker-consul容器服务自动发现与注册

目录 一.Consul概述 1.解决了什么问题 2.什么叫微服务或者注册与发现 3.consul的模式 4.相关命令 二.consul 部署 1.consul服务器部署 2.部署docker容器 3.Nginx负载均衡器 3.1.安装启动nginx 3.2.配置nginx负载均衡 3.3.创建配置consul complate模板文件 3.4.添加…

【Gitlab】SSH配置和克隆仓库

生成SSH Key ssh-keygen -t rsa -b 4096 私钥文件: id_rsa 公钥文件:id_rsa.pub 复制生成的ssh公钥到此处 克隆仓库 git clone repo-address 需要进行推送和同步来更新本地和服务器的文件 推送更新内容 git push <remote><branch> 拉取更新内容 git pull &…

【进阶篇-Day12:JAVA中stream流、File类的介绍】

目录 1、stream流1.1 stream流的作用1.2 stream流的思想1.3 获取stream流对象1.4 stream流中间操作方法1.5 stream流终结操作方法1.6 stream收集操作1.7 stream的综合案例 2、File类2.1 File类创建文件对象2.2 File类的常用方法2.3 File类的创建和删除方法2.4 File类的遍历方法…

CSS实现表格无限轮播

<div className{styles.tableTh}><div className{styles.thItem} style{{ width: 40% }}>报警名称</div><div className{styles.thItem} style{{ width: 35% }}>开始时间</div><div className{styles.thItem} style{{ width: 25% }}>状态&…

rk3588s 定制版 USB adb , USB2.0与USB3.0 区别,adb 由typeC 转换到USB3.0(第二部分)

硬件资源&#xff1a; rk3588s 核心板定制的地板 软件资源&#xff1a; 网盘上的 android12 源码 1 硬件上 客户只想使用 type c 接口中的 usb2.0 OTG 。在硬件上&#xff0c;甚至连 CC芯片都没有连接。 关于一些前置的知识。 1 USB2.0 与 USB3.0 的区别。 usb3.0 兼容2.0 …

mysql面试(二)

前言 这是mysql面试基础的第二节&#xff0c;主要是了解一下mysql数据更新的基本流程&#xff0c;还有三大日志的作用。但是具体的比如undolog是如何应用在mvcc机制中的&#xff0c;由于篇幅问题就放在下一在章节 数据更新流程 上面是说了更新真正数据之前的大致流程&#x…

邮件安全篇:如何防止邮件泄密?

本文主要讨论组织内部用户违反保密规定通过邮件泄密的场景。其他场景导致邮箱泄密的问题&#xff08;如账号被盗、邮件系统存在安全漏洞等&#xff09;不在本文的讨论范围。本文主要从邮件系架构设计、邮件数据防泄漏系统、建立健全规章制度、安全意识培训等方面分别探讨。 1. …

sql-libs通关详解

1-4关 1.第一关 我们输入?id1 看回显&#xff0c;通过回显来判断是否存在注入&#xff0c;以及用什么方式进行注入&#xff0c;直接上图 可以根据结果指定是字符型且存在sql注入漏洞。因为该页面存在回显&#xff0c;所以我们可以使用联合查询。联合查询原理简单说一下&…

科研绘图系列:R语言组合堆积图(stacked barplot with multiple groups)

介绍 通常堆积图的X轴表示样本,样本可能会存在较多的分组信息,通过组合堆积图和样本标签分组信息,我们可以得到一张能展示更多信息的可发表图形。 加载R包 knitr::opts_chunk$set(warning = F, message = F) library(tidyverse) library(cowplot) library(patchwork)导入…

【React】JSX:从基础语法到高级用法的深入解析

文章目录 一、什么是 JSX&#xff1f;1. 基础语法2. 嵌入表达式3. 使用属性4. JSX 是表达式 二、JSX 的注意事项1. 必须包含在单个父元素内2. JSX 中的注释3. 避免注入攻击 三、JSX 的高级用法1. 条件渲染2. 列表渲染3. 内联样式4. 函数作为子组件 四、最佳实践 在 React 开发中…

科研绘图系列:R语言组合热图和散点图

介绍 热图展示参与者的属性,散点图表示样本的时间跨度。 加载R包 library(tidyverse) library(ComplexHeatmap) library(circlize) library(cowplot)导入数据 数据可从以下链接下载(画图所需要的所有数据): 百度云盘链接: https://pan.baidu.com/s/1iEE9seTLdrrC3WDHJy…

P2p网络性能测度及监测系统模型

P2p网络性能测度及监测系统模型 网络IP性能参数 IP包传输时延时延变化误差率丢失率虚假率吞吐量可用性连接性测度单向延迟测度单向分组丢失测度往返延迟测度 OSI中的位置-> 网络层 用途 面相业务的网络分布式计算网络游戏IP软件电话流媒体分发多媒体通信 业务质量 通过…

富唯智能转运机器人:高效、智能、未来的选择

在现代工业中&#xff0c;高效的物流和物料处理是提升生产效率的关键。富唯智能转运机器人&#xff0c;以其卓越的技术和智能化的设计&#xff0c;为各行业提供了完美的解决方案。 产品概述 富唯智能转运机器人搭载ICD系列核心控制器&#xff0c;拥有多种移载平台&#xff0c…