10.20java作业

news/2025/10/20 22:09:22/文章来源:https://www.cnblogs.com/douzishuo/p/19153794

1.image
image
2.image
image
image
3.image
image
image
4.image
image
5.image
结果Parent: myValue = 10
Child: myValue = 20
Child: myValue = 20
Child: myValue = 20
Child: myValue = 21
第一行输出:new Parent() 创建父类对象,调用父类的 printValue 方法,输出父类自身的 myValue = 10。
第二行输出:new Child() 创建子类对象,子类重写了 printValue 方法,因此调用子类的方法,输出子类自身的 myValue = 20。
第三行输出:parent = child 是「父类引用指向子类对象」(多态的体现)。方法调用是运行时动态绑定的 —— 即使是父类引用,也会调用子类重写的 printValue,因此输出子类的 myValue = 20。
第四行输出:parent.myValue++ 中,成员变量没有 “多态”:父类引用只能访问父类自己的 myValue(此时父类 myValue 变为 11),但 printValue 仍调用子类方法(子类 myValue 还是 20),因此输出 Child: myValue = 20。
第五行输出:((Child) parent) 是强制类型转换(将父类引用转成子类引用),此时访问的是子类的 myValue,自增后子类 myValue 变为 21;再调用 printValue(子类方法),输出 Child: myValue = 21。
(3.) 总结 Java 的语法特性
方法重写与运行时多态:子类可重写父类方法;当父类引用指向子类对象时,方法调用会动态绑定到子类的重写方法(运行时才确定具体调用哪个类的方法)。
成员变量无多态:成员变量的访问是编译时确定的,父类引用即使指向子类对象,也只能访问父类自身的成员变量;若要访问子类成员变量,必须强制转换为子类引用。
类型转换:支持「父类引用指向子类对象」(自动向上转型);也支持「子类引用指向父类对象」(需手动强制向下转型)。
6.image
image

  1. 最初设计多态的思路
    现实里,同一类行为在不同事物上有不同表现(比如 “动物叫”,猫 “喵”、狗 “汪”)。开发者希望代码能像现实一样灵活 —— 用同一个父类引用,就能自动匹配子类的具体行为,不用写一堆 “如果是 A 就做 A 的事,如果是 B 就做 B 的事” 的判断,让代码更简洁、更贴近现实逻辑。
  2. 多态对开发的好处
    拓展更灵活:新增子类时,不用修改原有代码。比如系统里有 “形状” 父类和 “圆形、方形” 子类,现在加 “三角形”,只要三角形重写 “计算面积” 方法,原来处理 “形状” 的代码能直接用三角形对象。
    代码更简洁:用父类统一操作不同子类,减少重复判断。比如一个方法接收 “交通工具” 父类,不管传汽车、飞机,都能调用 “行驶” 方法,不用为每种交通工具写专属逻辑。
    降低代码依赖(解耦):调用者只需要知道父类的 “接口约定”,不用关心子类具体咋实现,让代码结构更清晰、易维护。
  3. 为什么是面向对象最重要的特性之一
    面向对象的核心是 “模拟复杂现实世界”,而多态是把 “抽象、继承、方法重写” 串联起来的关键—— 它让程序能以统一的方式处理千变万化的对象,同时又保留每个对象的 “独特行为”。如果没有多态,面向对象的代码会变得僵硬(新增功能要大量改老代码)、重复(每种对象都要写专属逻辑),所以多态是构建灵活、可维护的面向对象系统的核心基础。
    7.image
    image
    8.image
    9.import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.Scanner;

public class Newcourse {

// 数据库连接URL(适配MySQL 5.7,移除多余的时区参数)
private static final String DB_URL = "jdbc:mysql://localhost:13306/addcourses?useUnicode=true&characterEncoding=utf8&useSSL=false";
private static final String DB_USER = "root";         // 数据库用户名(与Navicat一致)
private static final String DB_PASSWORD = "pddnb123";// 数据库密码(与Navicat一致)
// 有效教师列表(业务校验规则)
private static final String[] VALID_TEACHERS = {"王建民", "刘立嘉", "刘丹", "杨子光", "张云霞", "武勇亮", "高飞", "孙静"};
// 有效地点列表(后续可补充校验逻辑)
private static final String[] VALID_LOCATIONS = {"一教", "二教", "三教", "基教"};public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入课程名称:");String courseName = scanner.nextLine().trim(); // 去除首尾空格,避免无效输入System.out.println("请输入教师姓名:");String teacherName = scanner.nextLine().trim();System.out.println("请输入课程地点:");String location = scanner.nextLine().trim();scanner.close();// 3. 业务校验if (!isValidTeacher(teacherName)) {System.out.println("教师姓名无效(不在预设列表中)");return;}if (isCourseNameExist(courseName)) {System.out.println("课程名称已存在,请更换名称");return;}// 补充地点校验(可选,根据需求添加)if (!isValidLocation(location)) {System.out.println("课程地点无效(不在预设列表中)");return;}// 4. 执行添加课程操作if (addCourse(courseName, teacherName, location)) {System.out.println("课程添加成功!");} else {System.out.println("课程添加失败,请检查数据库连接或表结构");}
}// 校验教师姓名是否在有效列表中
private static boolean isValidTeacher(String teacherName) {for (String validTeacher : VALID_TEACHERS) {if (validTeacher.equals(teacherName)) {return true;}}return false;
}// 校验课程地点是否在有效列表中(新增,完善业务逻辑)
private static boolean isValidLocation(String location) {for (String validLocation : VALID_LOCATIONS) {if (validLocation.equals(location)) {return true;}}return false;
}// 检查课程名称是否已存在(数据库查询操作)
private static boolean isCourseNameExist(String courseName) {try (// 自动关闭连接资源(try-with-resources语法)Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);// 预编译SQL,防止SQL注入PreparedStatement ps = conn.prepareStatement("SELECT COUNT(*) FROM course WHERE name = ?")) {ps.setString(1, courseName); // 为占位符赋值ResultSet rs = ps.executeQuery(); // 执行查询if (rs.next()) {int count = rs.getInt(1); // 获取查询结果(符合条件的记录数)return count > 0; // 记录数>0 → 课程已存在}} catch (Exception e) {System.out.println("检查课程是否存在时出错:");e.printStackTrace();}return false; // 异常时默认“不存在”(避免误判)
}// 添加课程到数据库(数据库插入操作)
private static boolean addCourse(String courseName, String teacherName, String location) {try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);PreparedStatement ps = conn.prepareStatement("INSERT INTO course(name, teacher, location) VALUES(?, ?, ?)")) {// 为SQL占位符赋值ps.setString(1, courseName);ps.setString(2, teacherName);ps.setString(3, location);int rowsAffected = ps.executeUpdate(); // 执行插入,返回受影响的行数return rowsAffected > 0; // 行数>0 → 插入成功} catch (Exception e) {System.out.println("添加课程时出错:");e.printStackTrace();}return false;
}

}

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

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

相关文章

题解:Luogu P14175 【MX-X23-T5】向死存魏

题意 给定长度为 \(n\) 的序列 \(a\) 和值域 \(V\)。有 \(m\) 次操作:给定 \(l,r,x\),将 \(a[l,r]\) 中 \(=x\) 的数改为 \(0\)。 给定 \(x\),在序列末尾添加 \(x\)。 给定 \(l\),查询最小的 \(r\) 使得 \(a[l,r]\…

软工第三次作业————结对作业

软工第三次作业————结对作业软工第三次作业--结对作业 软工第三次作业结对作业——实现一个自动生成小学四则运算题目的命令行程序(也可以用图像界面,具有相似功能)项目作业 实现一个自动生成小学四则运算题目的…

Spring 常见注解

目录🧐 @Configuration 和 @Import 的核心区别详细解释1. @Configuration (配置类)2. @Import (引入)参考资料 🧐 @Configuration 和 @Import 的核心区别特性 @Configuration @Import主要目的 标记一个类是 Java 配…

题解:AtCoder ARC208C Mod of XOR

题意 给定 \(C,X\),构造一个 \(n(1\leq n<2^{60})\) 使得 \((n\oplus C)\bmod{n}=X\),或报告无解。多测,\(1\leq T\leq 2\times 10^5\),\(1\leq C,X<2^{30}\)。 题解 神人构造题。 显然要有 \(n>X\)。不妨…

题解:Luogu P6898 [ICPC 2014 WF] Metal Processing Plant

题意 给定 \(n\),对于每个 \(1\leq i,j\leq n\),给出 \(d(i,j)\)。对于集合 \(S\),定义 \(D(S)=\max\limits_{i,j\in S}d(i,j)\)。将 \(\{1,2,\cdots,n\}\) 划分为两个集合 \(A,B\),最小化 \(D(A)+D(B)\)。\(1\leq…

32-腾讯IM接入资料和定价

腾讯IM接入资料和定价信息 一、产品概述 腾讯云即时通信IM(Instant Messaging)是腾讯提供的企业级即时通讯服务,支持多种平台接入,包括Android、iOS、Web和小程序等。 二、定价信息 1. 基础服务资费体验版: 提供完…

题解:AtCoder ARC207A Affinity for Artifacts

题意 给定长度为 \(n\) 的序列 \(a\) 和一个数 \(X\),求有多少种 \(a\) 的重排 \(b\) 使得 \(\sum\limits_{i=1}^n\max(b_i-i+1,0)\leq X\)。\(1\leq n\leq 100\),\(1\leq a_i,X\leq 10^9\)。 题解 你说得对,但我怎…

题解:Luogu P9260 [PA 2022] Miny

题意 给定一棵 \(n\) 个点的树,第 \(i\) 条边 \((a_i,b_i)\) 有边权 \(c_i\),第 \(i\) 个点有一个爆炸半径 \(r_i\)。当一个点被引爆时,所有在该点爆炸半径范围内的点也会被引爆,这些新的被引爆的点也可能继续引爆…

题解:Luogu P13544 [OOI 2022] Serious Business

题意 给定一个 \(3\times n\) 的网格,每个格子 \((i,j)\) 内有一个数 \(a_{i,j}\)。一个人初始分数为 \(0\),在位置 \((1,1)\) 处,每次可以向右或向下走一格,目标是到达 \((3,n)\)。当走到格子 \((i,j)\) 时,这个…

题解:Luogu P14254 分割(divide)

题意 给定一棵 \(n\) 个点的树,设根节点 \(1\) 的深度为 \(1\)。给定 \(k\),求有多少从树中选出 \(k\) 个两两不同的节点,组成有序序列 \(b_1,\cdots,b_k\) 的方案,使得:对于每个 \(1\leq i<k\),\(1<d_{b_…

31_创蓝短信接入资料和定价

创蓝短信接入资料和定价 公司简介 创蓝云智为企业提供短信、语音外呼、闪验、号码检测、实名认证等通讯类产品,致力于让企业更高效高质量的获得用户及触达用户。 产品类型通知短信 会员营销短信 国际营销短信 验证码短…

构造单

题目来源 取模下序列构造 是否存在 \(3\) 个长度为 \(n\) 的 \([0,n)\) 的排列 \(a,b,c\),使得 \(a_i+b_i=c_i\mod n\) 遇到取模考虑奇偶性,不要像太复杂,考虑 \(n\) 为奇数的时候直接 \(a=b=~0,1,2,3,4,…\),\(c=…

02.Python百行代码实现抽奖系统

02.Python百行代码实现抽奖系统 ------------------------------------------------ 执行后——————————————————————————————————————————————————————————…

[笔记]高斯消元

高斯消元法是求解线性方程组的经典算法。 内容 求解如下的线性方程组(P3389 【模板】高斯消元法): \[\begin{cases} a_{1,1}x_1+a_{1,2}x_2+\dots+a_{1,n}x_n=b_1\\ a_{2,1}x_1+a_{2,2}x_2+\dots+a_{2,n}x_n=b_2\\ …

[SSH] scp:基于 SSH 的安全文件传输

[SSH] scp:基于 SSH 的安全文件传输$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录01 简介02 操作2.1 本地发送到远程2.2 从远程下载2.3 主机之间复制…

CSP-S 35

10.2010.20 神秘%你赛,rk1 170 ,你管这叫CSP-S? t1 赛时狂写t1 ,想了半天想出来个神秘做法,时间复杂度不会证但应该是对的,写完本地大阳历1.2s 感觉应该没啥大问题,结果空间炸了,最后2h写的代码和暴力分一样多 …

题解:P11662 [JOI 2025 Final] 方格染色 / Grid Coloring

题目传送门 是一道黄题 这里提供一种 \(O(n\log n)\) 的做法\(\mathscr{PART\ \ ONE}\)我们在手%的时候不难发现(注意力有点也不惊人) 虽然第一列和第一行 不保证有序 但是因为这里的前缀$\ max\ $性质保证了第二列和…

CSP-S 32 多校5

10.1510.15 S-32&&多校5 签到后遗憾离场。 t1 签到题,大力分讨即可。 注意符号。 记得排序(没大阳历时忘排序了) code锵锵 #include <bits/stdc++.h> using namespace std; const int N = 1e6 + 10;…

CSP-S 33

10.1710.17 t1 签到题 注意到约数只有 \(O(\sqrt n)\) 级别,暴力找约数即可。 唐人当然有唐做法啦! 分解质因数+dfs搜约数 反正唐就对了。 code嘻嘻 #include <bits/stdc++.h> #define int long long #define…

CSP-S 29

10.11 只记录了当时认为有意义的题10.11 t3 赛后才看懂题面 \(\ldots\) 妈妈我会推式子!(骗你的其实我不会) 推完式子就过了。 考虑先求出 \(1\) 为根时的答案,之后换根即可。 开始拆贡献ing 对于根结点,由于一开…