当前位置: 首页 > news >正文

JAVA—抽象—定义抽象类Converter及其子类WeightConverter

同样,我们由这道题引出抽象类,抽象方法这个概念。

按下面要求定义类Converter及其子类WeightConverter

定义抽象类:Converter:

定义一个抽象类Converter,表示换算器,其定义的如下:

  1. 一个私有的String类型成员变量:name,表示换算器Converter的名称,并定义name变量的getter方法;
  2. 一个带参数的构造器,用于对name赋值;
  3. 一个公有的抽象方法:double convert(); 表示进行换算操作。

定义Converter的子类WeightConverter:

定义Converter的子类WeightConverter,表示重量换算器。

对于WeightConverter类的要求如下:

  1. 成员变量 value 表示原重量值,并定义其getter方法;
  2. 成员变量 factor 表示换算系数,比如 公斤-克的换算系数为1000,因为1公斤=1000克;
  3. 带三个参数的构造器,在实例化WeightConverter对象时初始化:换算器名称、原重量值以及换算系数;
  4. 实现父类Converter中的convert方法,将原重量值换算为指定单位的重量值

Main类代码:

import java.lang.reflect.Modifier;
import java.util.Scanner;
public class Main {public static void main(String[] args) throws ClassNotFoundException {Class<?> clazz = Class.forName("Converter");Class<?> clazz2 = Class.forName("WeightConverter");boolean isAbs = Modifier.isAbstract(clazz.getModifiers()) ;System.out.println(clazz.isAssignableFrom(clazz2)+" "+Modifier.isAbstract(clazz.getModifiers()));Scanner scanner = new Scanner(System.in);System.out.println("请输入换算器名称(比如:斤-克)、原重量值和换算系数,中间用空格分开");String name = scanner.next();double value = scanner.nextDouble();double factor = scanner.nextDouble();WeightConverter converter = new WeightConverter(name,value,factor);String[] units = name.split("-");System.out.println(converter.getName()+"换算,"+converter.getValue()+units[0]+"="+converter.convert()+units[1]);}
}

输入样例:

在这里给出一组输入。例如:

斤-克 2.5 500

输出样例:

在这里给出相应的输出。例如:

true true
请输入换算器名称(比如:斤-克)、原重量值和换算系数,中间用空格分开
斤-克换算,2.5斤=1250.0克

先来看有关抽象类问题的需求:
 定义一个抽象类,成员变量和构造器倒是和以前定义类时差不多,唯一变了的就是方法,这里要求我们定义一个抽象方法。

好嘞,撸起袖子加油干——咱们来唠唠“抽象”。

抽象

抽象:英文abstract,为什么要抽象?Java为了符合现实生活中的逻辑,有些类是不能被实例化的,于是便有了抽象类。

举个例子:我们要介绍一个人的爱好。这时候,爱好就是个抽象的概念,它看不见摸不着,是只存在人类脑子里的概念。爱好可以是方方面面,在写爱好类时,我们可以标上爱好的名字,但我们是敲不出方法体的——再细细道来:

我们可以先写一个Person类,然后Person类具有姓名,职业以及爱好这个方法,由上面分析可以知道,在没有实例化Person时我们并不知道这个爱好究竟是什么。这时候我们利用abstract关键字,把爱好这个方法写成抽象方法(具体格式在后面),既然这个类有个方法/行为是抽象的,那么这个类也应该是抽象的。

因为对象,我们又称作实例对象,所有的属性和方法都得具体化。一旦抽象类被实例化,一是它的逻辑上说不通,二是抽象方法与具体、完整的实例方法相矛盾。

小总结:

故抽象类是不能被实例化的,且有了抽象方法就一定是抽象类

且看代码:

public abstract class Person {//定义一个Person类private String name;private String career;//俩成员变量public Person(String name,String career){this.name = name;this.career = career;}//有参构造器public abstract String hobby();//未知爱好,无法书写方法体,故令其为抽象方法public String toString()//这里重写toString()方法,改变返回类的信息,不再是简单的地址_哈西玛{return name + "是一位" + career + "爱好是" + hobby();}//toString()方法是Person类继承Object类的方法,对其进行重写}

题外话:所有的类的拥有一个共同的父类:Object类,一般默认不写,但是默认继承。

虽说只能有一个直接父类,但是间接父类是可以有很多的,并且都会继承间接父类的属性和方法。有关继承和方法覆盖,我们在这里详说:感兴趣的小伙伴可移步这里

Java-继承-定义Student类继承于Person类(例)-CSDN博客

抽象类的语法格式:

public abstract class 类名
{}//abstract关键字放在class前面

abstract是放在class前面,抽象一般是公开的,但一定不能是private。

抽象方法的语法格式:

abstract 方法返回类型 方法名(参数列表)
{//方法体
}

问题来了,抽象到底做什么用呢?---抽象类的逻辑作用:避免抽象类被实例化(这个我们上文解释过了);代码上的作用,其实就是一种继承。

抽象方法的作用——用来对继承它的子类的行为作出某种规范,实现方法的声明。

怎么又和继承挂上钩了?好问题,不过能问出这种问题,说明还需要对继承有正确的认识。

对于上次说到的继承:我们会使用继承,是因为类与类之间具有传承。这里引入的抽象类,其实本质上是对继承的扩大,有些时候父类并不会是实实在在的类,不能被实例化。

综上所述,继承本质上是描述类与类之间抽象与具体的关系,父类未完善的,子类就对其补充。

而抽象,也正是对继承的普遍化,对于我们定义子类起着更加规范的作用,因为抽象方法必须实现,因为不实现,编译都不给过。而子类继承非抽象类的父类的方法时,对于方法重写需要我们主动Override。

了解了继承与抽象的关系,那读懂抽象的语法规则简直易如反掌。

abstract的语法规则

1.abstract不能修饰private,抽象方法作父类肯定要被子类继承并一对一进行完善,子类看不见,显然是矛盾的。

2.抽象方法必须定义在抽象类中,抽象方法意味着某个类在某个行为上抽象,那沾了点抽象,就是抽象类了。

3.抽象方法不能有实现,被实现的抽象方法就不叫抽象方法了。注意:在子类里被实现的抽象方法是叫实例方法,也可以叫方法覆盖不过是强制性的。只有抽象类里的方法才能算抽象方法

咱们把这道题拿下,抽象的知识点基本就掌握了。

回到题目

1、2要求我们还是直接上代码,需要相应详细参考的,可以移步:定义类:定义一个类Square表示正方形_定义一个square类,当客户访问该页面时,服务器创建该类的对象,只要客户给出正方形-CSDN博客

public abstract class Converter {//让我们定义一个抽象类,则在class前面加一个abstractString name;//换算器名称public String getName(){return name;}//name的getter方法public Converter(String name){this.name = name;}//有参构造器
}

3.抽象方法的书写

public abstract class Converter {//...public abstract double convert();//抽象方法,是不是很像方法的声明,不过确实是方法声明//抽象方法,如果在声明里面,abstract前面写上了public ,那后面在子类实现方法的时候一定也要加上public,否则会报错
}

在抽象方法声明里面有了public,后面子类实现方法的时候一定要加上public。如果声明里面没有写public,子类里面倒是可写 可不写。有觉得绕的同学,可以记住:要么都写,要么都不写。

前俩题,涉及定义类这个知识点。而3题,涉及super关键字和继承,要作详细了解的同学,移步: Java-继承-定义Student类继承于Person类-CSDN博客

前仨的代码:

public class WeightConverter extends Converter//子类继承抽象类/父类
{private double value;//原重量值public double  factor;//换算系数public double getValue(){return value;}public WeightConverter(String name,double value,double factor){super(name);//调用父类的构造器,实现该对象下的成员变量赋值this.value = value;this.factor = factor;}
}

 

子类对抽象方法的实现

public class WeightConverter extends Converter
{
//...public double convert(){return value * factor; }//根据题意得,看不懂题?由输入样例和输出样例结合一下,可知就是value和factor相乘的结果}

完整代码:(合在一个java文件下,只会有一个public类就是main类)

abstract class Converter
{String name;public String getName(){return name;}public Converter(String name){this.name = name;}public abstract double convert();}class WeightConverter extends Converter
{double value;//原重量值double  factor;//换算系数public double getValue(){return value;}public WeightConverter(String name,double value,double factor){super(name);this.value = value;this.factor = factor;}public double convert(){return value * factor; }}

相关文章:

JAVA—抽象—定义抽象类Converter及其子类WeightConverter

同样&#xff0c;我们由这道题引出抽象类&#xff0c;抽象方法这个概念。 按下面要求定义类Converter及其子类WeightConverter 定义抽象类&#xff1a;Converter&#xff1a; 定义一个抽象类Converter&#xff0c;表示换算器&#xff0c;其定义的如下&#xff1a; 一个私有…...

面对复杂多变的网络攻击,企业应如何守护网络安全

企业上云&#xff0c;即越来越多的企业把业务和数据&#xff0c;迁移到云端。随着云计算、大数据、物联网、人工智能等技术的发展&#xff0c;用户、应用程序和数据无处不在&#xff0c;企业之间的业务边界逐渐被打破&#xff0c;网络攻击愈演愈烈&#xff0c;手段更为多。 当前…...

计算机网络练习-计算机网络概述与性能指标

计算机网络概述 ----------------------------------------------------------------------------------------------------------------------------- 1. 计算机网络最据本的功能的是( )。 1,差错控制 Ⅱ.路由选择 Ⅲ,分布式处理 IV.传输控制 …...

vite vue3 ts import.meta在vscode中报错

问题描述&#xff1a;开发使用的框架为vitevue3ts&#xff0c;在开发过程中莫名其妙报仅当“--module”选项为“es2020”、“esnext”或“系统”时才允许使用“import.meta”元属性 问题解决&#xff1a; 通过更改tsconfig.json的module为esnext&#xff0c;es2022等&#xff0…...

Java synchronized(详细)

​ synchronized 一&#xff0c;介绍 在Java中&#xff0c;synchronized关键字用于解决多线程并发访问共享资源时可能出现的线程安全问题。当多个线程同时访问共享资源时&#xff0c;如果没有合适的同步机制&#xff0c;可能会导致以下问题&#xff1a; 竞态条件&#xff08…...

算法设计与分析实验报告python实现(排序算法、三壶谜题、交替放置的碟子、带锁的门)

一、 实验目的 1&#xff0e;加深学生对算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 1、排序算法…...

实训问题总结——ajax用get可以成功调用controller方法,用POST就出404错误

因为传输密码时必须用POST。 还有用GET传输参数&#xff0c;说有非法字符&#xff0c;想试试POST是否可以解决。 404错误的三个大致原因&#xff0c;1&#xff1a;找不到对的请求路径&#xff0c;2&#xff1a;请求方式错误&#xff0c;3、请求参数错误。 后来可以调用了。但…...

1、认识MySQL存储引擎吗?

目录 1、MySQL存储引擎有哪些&#xff1f; 2、默认的存储引擎是哪个&#xff1f; 3、InnoDB和MyISAM有什么区别吗&#xff1f; 3.1、关于事务 3.2、关于行级锁 3.3、关于外键支持 3.4、关于是否支持MVCC 3.5、关于数据安全恢复 3.6、关于索引 3.7、关于性能 4、如何…...

微信小程序媒体查询

在微信小程序中&#xff0c;media媒体查询不支持screen关键字&#xff0c;因为小程序页面是再webview中渲染的&#xff0c;而不是在浏览器中渲染的。 在设置样式时&#xff0c;可以使用 wxss 文件中的 media 规则来根据屏幕宽度或高度设置不同的样式。 device-width:设备屏幕…...

前端(动态雪景背景+动态蝴蝶)

1.CSS样式 <style>html, body, a, div, span, table, tr, td, strong, ul, ol, li, h1, h2, h3, p, input {font-weight: inherit;font-size: inherit;list-style: none;border-spacing: 0;border: 0;border-collapse: collapse;text-decoration: none;padding: 0;margi…...

软考-系统集成项目管理中级-新一代信息技术

本章历年考题分值统计 本章重点常考知识点汇总清单(掌握部分可直接理解记忆) 本章历年考题及答案解析 32、2019 年上半年第 23 题 云计算通过网络提供可动态伸缩的廉价计算能力&#xff0c;(23)不属于云计算的特点。 A.虚拟化 B.高可扩展性 C.按需服务 D.优化本地存储 【参考…...

【卷积神经网络进展】

打基础日常记录 CNN基础知识1. 感知机2. DNN 深度神经网络&#xff08;全连接神经网络&#xff09;DNN 与感知机的区别DNN特点&#xff0c;全连接神经网络DNN前向传播和反向传播 3. CNN结构【提取特征分类】4. CNN应用于文本 CNN基础知识 1. 感知机 单层感知机就是一个二分类…...

yarn的安装和使用

windows mac 环境 yarn的安装和使用 yarn安装 npm install -g yarnyarn设置代理 yarn config set registry https://registry.npm.taobao.org -gyarn官方源 yarn config set registry https://registry.yarnpkg.comyarn使用 // 查看板本 yarn --version// 安装指定包 yarn…...

Golang | Leetcode Golang题解之第10题正则表达式匹配

题目&#xff1a; 题解&#xff1a; func isMatch(s string, p string) bool {m, n : len(s), len(p)matches : func(i, j int) bool {if i 0 {return false}if p[j-1] . {return true}return s[i-1] p[j-1]}f : make([][]bool, m 1)for i : 0; i < len(f); i {f[i] m…...

【Leetcode】top 100 图论

基础知识补充 1.图分为有向图和无向图&#xff0c;有权图和无权图&#xff1b; 2.图的表示方法&#xff1a;邻接矩阵适合表示稠密图&#xff0c;邻接表适合表示稀疏图&#xff1b; 邻接矩阵&#xff1a; 邻接表&#xff1a; 基础操作补充 1.邻接矩阵&#xff1a; class GraphAd…...

【沈阳航空航天大学】 <C++ 类与对象计分作业>

C类与对象 1. 设计用类完成计算两点距离2. 设计向量类3. 求n!4. 出租车收费类的设计与实现5. 定义并实现一个复数类6. 线性表类的设计与实现7. 数组求和8. 数组求最大值 1. 设计用类完成计算两点距离 【问题描述】设计二维点类Point&#xff0c;包括私有成员&#xff1a;横坐标…...

Vue3 自定义指令Custom Directives

简介 在vue中重用代码的方式有&#xff1a;组件、组合式函数。组件是主要的构建模块&#xff0c;而组合式函数更偏重于有状态的逻辑。 指令系统给我们提供了例如&#xff1a;v-model、v-bind&#xff0c;vue系统允许我们自定义指令&#xff0c;自定义指令也是一种重用代码的方式…...

蓝桥杯 【日期统计】【01串的熵】

日期统计 第一遍写的时候会错了题目的意思&#xff0c;我以为是一定要八个整数连在一起构成正确日期&#xff0c;后面发现逻辑明明没有问题但是答案怎么都是错的才发现理解错了题目的意思&#xff0c;题目的意思是按下标顺序组成&#xff0c;意思就是可以不连续&#xff0c;我…...

CSP201409T5拼图

题意&#xff1a;给出一个 n m nm nm的方格图&#xff0c;现在要用如下L型的占3个的积木拼到这个图中,总共有多少种拼法使图满。 #include<bits/stdc.h> using namespace std; long long n,m,k1,Now; int Mod1000000007; struct Matrix {long long a[129][129];Matrix(…...

mongoDB 优化(2)索引

执行计划 语法&#xff1a;1 db.collection_xxx_t.find({"param":"xxxxxxx"}).explain(executionStats) 感觉这篇文章写得很好&#xff0c;可以参考 MongoDB——索引&#xff08;单索引&#xff0c;复合索引&#xff0c;索引创建、使用&#xff09;_mongo…...

【2024系统架构设计】案例分析- 5 Web应用

目录 一 基础知识 二 真题 一 基础知识 1 Web应用技术分类 大型网站系统架构的演化:高性能、高可用、可维护、应变、安全。 从架构来看:MVC,MVP,MVVM,REST,Webservice,微服务。...

布隆过滤器详解及java实现

什么是布隆过滤器&#xff1f; 布隆过滤器&#xff08;Bloom Filter&#xff09;是一种数据结构&#xff0c;用于判断一个元素是否属于一个集合。它的特点是高效地判断一个元素是否可能存在于集合中&#xff0c;但是存在一定的误判率。 布隆过滤器的基本原理是使用一个位数组…...

CloudCompare 点云工具

CloudCompare 点云工具 1. CloudCompare简介1.1 CloudCompare下载 2. CloudCompare安装 1. CloudCompare简介 CloudCompare 是一款开源的三维点云处理软件&#xff0c;它提供了一系列功能来处理、查看和分析三维点云数据。这个软件可以用于许多不同的应用领域&#xff0c;包括…...

Linux 著名的sudo、su是什么?怎么用?

一、su 什么是su&#xff1f; su命令&#xff08;简称是&#xff1a;substitute 或者 switch user &#xff09;用于切换到另一个用户&#xff0c;没有指定用户名&#xff0c;则默认情况下将以root用户登录。 为了向后兼容&#xff0c;su默认不改变当前目录&#xff0c;只设…...

C语言分支语句

一、什么是语句 C语句可分为以下五类&#xff1a; 表达式语句 函数调用语句 控制语句 复合语句 空语句 本周后面介绍的是控制语句。 控制语句用于控制程序的执行流程&#xff0c;以实现程序的各种结构方式&#xff0c;它们由特定的语句定义符组成&#xff0c;C语 言有…...

android 资源文件混淆

AGP7.0以上引用AndResGuard有坑 记录下 在项目的build.gradle中添加如下 buildscript {ext.kotlin_version "1.4.31"repositories {google()jcenter()maven {url "https://s01.oss.sonatype.org/content/repositories/snapshots/"}}dependencies {class…...

注册接口和前置SQL及数据生成及封装

注册接口 演示注册接口的三步操作&#xff1a;【注册流程逻辑】 第一步&#xff1a;发送注册短信验证码接口请求 请求方法&#xff1a; put 请求地址&#xff1a;http://shop.lemonban.com:8107/user/sendRegisterSms 请求参数&#xff1a;{“mobile”:“13422337766”} 请求头…...

鸿蒙实战开发-通过输入法框架实现自绘编辑框

介绍 本示例通过输入法框架实现自会编辑框&#xff0c;可以绑定输入法应用&#xff0c;从输入法应用输入内容&#xff0c;显示和隐藏输入法。 效果预览 使用说明 1.点击编辑框可以绑定并拉起输入法&#xff0c;可以从输入法键盘输入内容到编辑框。 2.可以点击attach/dettac…...

深度学习中的注意力模块的添加

在深度学习中&#xff0c;骨干网络通常指的是网络的主要结构或主干部分&#xff0c;它负责从原始输入中提取高级特征。骨干网络通常由卷积神经网络&#xff08;CNN&#xff09;或者类似的架构组成&#xff0c;用于对图像、文本或其他类型的数据进行特征提取和表示学习。 注意力…...

Docker 部署开源远程桌面工具 RustDesk

RustDesk是一款远程控制&#xff0c;远程协助的开源软件。完美替代TeamViewer &#xff0c;ToDesk&#xff0c;向日葵等平台。关键支持自建服务器&#xff0c;更安全私密远程控制电脑&#xff01;官网地址&#xff1a;https://rustdesk.com/ 环境准备 1、阿里云服务器一 台&a…...

wordpress 媒体/网页设计与制作教程

SQL Server 2014 Visual Studio 2015&#xff08;VS&#xff09;遇到的错误以及解决方法作者&#xff1a;张国军_Suger开发工具与关键技术&#xff1a;SQL Server 2014、Visual Studio 2015&#xff08;VS&#xff09;这些错题主要是为了防止自己再错记录一下自己曾经出现的错…...

网站微信支付申请流程/体验式营销

使用命令 &#xff1a;route route 命令 显示和设置Linux路由表 -A&#xff1a;设置地址类型&#xff1b; -C&#xff1a;打印将Linux核心的路由缓存&#xff1b; -v&#xff1a;详细信息模式&#xff1b; -n&#xff1a;不执行DNS反向查找&#xff0c;直接显示数字形式的I…...

金融网站 改版方案/微信营销推广公司

题意&#xff1a;一个由钉子加绳子围成的凸多边形农场。现 在绳子和部分钉子缺失,问能否通过剩余的钉子确定原农场的样子。 思路&#xff1a;做凸包。当围成的凸包每条边上都有至少3个钉子(含端点)&#xff0c;则可确定原农场样子。因为如果只有两个钉子,那么可能存在一个消失…...

网站数据统计/网站排名优化客服

本质&#xff1a;string是c风格字符串&#xff0c;而string本质是一个类 string和char*区别&#xff1a; char*是一个指针string是一个类&#xff0c;内部封装了char*,管理这个字符串&#xff0c;是一个char*型容器 特点&#xff1a; string内部封装了很多成员函数&#xff1…...

国美在线网站建设/培训方案

1. 仿真方法 将超声换能器中的阵元总数设置为32&#xff0c;对96条扫描线进行B模式成像仿真。 2. 成像模拟 定义超声换能器&#xff0c;依次模拟每个扫描线。对于每个扫描线&#xff0c;更新计算域内medium.sound_speed和medium.density的值。然后返回并存储每个换能器阵元&…...

wordpress设置网站首页/百度推广客户端官方下载

转载于:https://www.cnblogs.com/lexiaofei/p/6732137.html...