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.xdnf.cn/news/1487815.html

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

相关文章

【区块链+绿色低碳】基于区块链技术的碳账户金融服务平台 | FISCO BCOS应用案例

实现碳达峰、碳中和是我国一场广泛而深刻的经济社会变革,是党中央统筹国内国际两个大局和经济社会发展全局, 推动生态文明建设和经济高质量发展,建设社会主义现代化强国作出的重大战略决策。金融资源绿色低碳化是推 动碳达峰、碳中和的重要手…

ICMPv6与DHCPv6之网络工程师软考中级

ICMPv6概述 ICMPv6是IPv6的基础协议之一。 在IPv6报文头部中,Next Header字段值为58则对应为ICMPv6报文。 ICMPv6报文用于通告相关信息或错误。 ICMPv6报文被广泛应用于其它协议中,包括NDP、Path MTU发现机制等 ICMPv6控制着IPv6中的地址自动配置、地址…

将github上的项目导入到vscode并创建虚拟环境

1、将github上的项目导入到vscode 直接从github上下载到本地&#xff0c;用vscode打开&#xff08;Open file&#xff09; 2、创建虚拟环境 python -m venv <name> <name>\Scripts\activate ps: 1、退出虚拟环境 deactivate 2、如果运行python -m venv <…

十七、(正点原子)Linux LCD驱动

一、Framebuffer设备 在 Linux 中应用程序通过操作 RGB LCD 的显存来实现在 LCD 上显示字符、图片等信息。 先来看一下裸机 LCD 驱动如下&#xff1a; ①、初始化 I.MX6U 的 eLCDIF 控制器&#xff0c;重点是 LCD 屏幕宽(width)、高(height)、 hspw、 hbp、 hfp、 vspw…

c++语言实现类似swoole扩展的项目实践

实践目录&#xff1a; 最终实现的效果&#xff1a; <?php$server new BF\Server("0.0.0.0",9509);$server->on("connect",function($server,$fd){print_r($server);echo "收到客户端的连接了\r\n" ; });$server->on("receive…

嵌入式人工智能(24-树莓派4B的Linux系统故障日志查询分析)

1、dmesg ‌dmesg命令用于显示或控制‌Linux内核的环形缓冲区内容&#xff0c;主要用于查看系统启动信息、硬件检测、驱动加载等关键信息。以下是该命令的一些基本用法和选项&#xff1a; 基本用法&#xff1a;直接输入dmesg命令即可查看内核消息。例如&#xff0c;使用sudo …

Windows10+vs 2017中创建WEB API教程

我们如果需要用到web api怎么办&#xff1f;一般来说可以自己开发和去使用别人开发好的api&#xff0c;今天我们来讲一下Windows10vs 2017中创建web Api的教程。目前本教程当中的方法在Win10 VS2017&#xff08;MVC5&#xff09;win server2016vs2017&#xff0c;vs2013 vs201…

PHP简单商城单商户小程序系统源码

&#x1f6cd;️轻松开店&#xff0c;触手可及&#xff01;「简单商城小程序」让电商梦想照进现实&#x1f31f; &#x1f389;开店新风尚&#xff0c;「简单商城小程序」引领潮流&#xff01; 还在为繁琐的电商开店流程烦恼吗&#xff1f;想要快速搭建自己的线上商城&#x…

vue3引入openlayers

安装ol包 OpenLayers作为 ol npm包提供&#xff0c;它提供了官方支持的API的所有模块。 官方地址&#xff1a;ol npm install ol模块和子模块约定 具有CamelCase名称的OpenLayers模块提供类作为默认导出&#xff0c;并且可能包含其他常量或函数作为命名导出&#xff1a; i…

得物App弱网诊断探索之路

一、背景 随着得物用户规模和业务复杂度不断提升&#xff0c;端上网络体验优化已逐步进入深水区。为了更好地保障处于弱网状态下得物App用户的使用体验&#xff0c;我们在已有的网络体验大盘、网络诊断工具的基础上研发了弱网诊断能力。该工具能够高效实时诊断用户真实网络环境…

c++初阶知识——string类详解

目录 前言&#xff1a; 1.标准库中的string类 1.1 auto和范围for auto 范围for 1.2 string类常用接口说明 1.string类对象的常见构造 1.3 string类对象的访问及遍历操作 1.4. string类对象的修改操作 1.5 string类非成员函数 2.string类的模拟实现 2.1 经典的string…

Jenkins+Gitlab持续集成综合实战

一、持续集成应用背景&#xff1a; DevOps&#xff1a;&#xff08;英文Development&#xff08;开发&#xff09;和Operations&#xff08;技术运营&#xff09;的组合&#xff09;是一组过程、方法与系统的统称&#xff0c;用于促进开发&#xff08;应用程序/软件工程&#…

本地生活抽佣系统搭建:如何让系统具有竞争优势?

随着本地生活的潜力不断展现&#xff0c;本地生活服务商逐渐成为新兴职业中的一大热门&#xff0c;本地生活抽佣系统搭建的热度也一直保持着飙升的状态。 抖音生活发布的《2023年数据报告》显示&#xff0c;2023年&#xff0c;抖音生活服务平台总交易额增长256%&#xff0c;抖…

android13 Settings动态显示隐藏某一项

总纲 android13 rom 开发总纲说明 目录 1.前言 2.确定目标设置项 3.修改参考 3.1 方法1 3.2 方法2 4.编译测试 5.彩蛋 1.前言 在Android 13系统中,动态显示或隐藏Settings应用中的某一项通常涉及到对Settings应用的内部逻辑进行修改。由于Settings应用是一个系统应用…

涉及VPN、金融、健康服务等类型应用上架政策突变

大家好&#xff0c;我是牢鹅&#xff01;今天为大家分享Google Play 2024年7月17日下发的政策更新&#xff0c;此次政策更新距上次&#xff08;4月5日&#xff09;政策大更新仅过去三个月。前段时间牢鹅跟谷歌的人有聊过&#xff0c;今年他们的目标很明确&#xff0c;提高开发者…

云计算复习--虚拟化技术

文章目录 虚拟化技术定义与原理虚拟机监视器&#xff08;VMM&#xff09;虚拟化技术服务器虚拟化存储虚拟化网络虚拟化应用虚拟化 关键技术新型虚拟化技术发展进展作业 虚拟化技术定义与原理 定义&#xff1a;虚拟化技术是一种将计算机物理实体&#xff08;如服务器、存储设备…

ElasticSearch学习篇15_《检索技术核心20讲》进阶篇之TopK检索

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243&#xff0c;文档形式记录笔记。 相关问题&#xff1a; ES全文检索是如何进行相关性打分的&#xff1f;ES中计算相关性得分的时机?如何加速TopK检索&#xff1f;三种思路 精准To…

SAP如何获取程序变式

一&#xff1a;获取变式的值 二&#xff1a;相关的内容表 VARID&#xff1a;变式目录 VARIT&#xff1a;变式描述 VARI &#xff1a;变式内容

CanFestival对象字典编辑器Python3版本

CanFestival是一个CANOpen开源C库&#xff0c;其自带对象字典编辑器&#xff0c;但是得用Python2来打开&#xff0c;其界面库使用的也是老版本的wxPython&#xff0c;使用起来非常不方便。 本人复制了一份对象字典编辑器源码&#xff0c;然后经过辛苦的修改&#xff0c;终于可…

Pyqt5新手教程

PyQt界面开发的两种方式&#xff1a;可视化UI 编程式UI &#xff08;1&#xff09;可视化UI&#xff1a;基于Qt Designer可视化编辑工具进行组件拖放、属性设置、布局管理等操作创建界面。 一是将其保存为.ui文件&#xff0c;然后在PyQt应用程序中加载和使用.ui文件。 二是使用…