Java程序设计实验4 | 面向对象(下)

news2024/9/20 6:03:50

*本文是博主对Java各种实验的再整理与详解,除了代码部分和解析部分,一些题目还增加了拓展部分(⭐)。拓展部分不是实验报告中原有的内容,而是博主本人自己的补充,以方便大家额外学习、参考。

(没更完,过几天补上)

一、实验目的

1、理解继承的概念;

2、掌握方法的重写;

3、掌握super、final关键字的使用;

4、掌握抽象类和接口的使用;

5、掌握多态的使用;

6、掌握内部类的使用;

7、掌握异常处理方式,能够自定义异常类;

8、了解Object类。


二、实验内容

1、实验题目:类的继承和方法重写

定义一个基类作为父类,再定义一个继承父类的子类,在子类中重写父类的方法,使用super关键字调用父类的方法,测试其功能。

本题是类的继承的练习。在继承中,super关键字可以在子类中调用父类的成员变量、成员方法和构造方法。注意:在子类构建的过程中,会调用父类的构造方法。默认情况下,子类会调用父类无参的构造方法:super()。

源代码:

public class S4_1 {
    public static void main(String[] args) {
        //创建一个Animal对象
        Animal animal = new Animal("动物");
        //调用父类的方法
        animal.show();
        animal.say();
        //创建一个Cat对象
        Cat cat = new Cat("小猫!");
        //调用重写的父类的方法
        cat.show();
        cat.say();
    }
}

class Animal {
    public String name;
    public int age;

    public Animal(String name) {
        this.name = name;
    }
    public void show() {
        System.out.println("一个Animal类!");
    }
    public void say() {
        System.out.println("你好" + name);
    }
}

class Cat extends Animal{
    public Cat(String name) {
        //调用父类的构造方法
        super(name);
    }
    public void show() {
        super.show();   //调用父类的方法
        System.out.println("父类的age是:"+super.age);   //调用父类的age成员变量
        System.out.println("一个Cat类!");
    }
    public void say() {
        super.say();    //调用父类的方法
        System.out.println("喵喵" + name);
    }
}

列出测试数据和实验结果截图: 


2、定义一个类,在类中声明成员变量和成员方法,尝试使用final关键词修饰类中的变量、方法及该类,测试并查看结果,必要时加以注释。

1、没有final修饰时:​​​​​​​

public class S4_2 {
    public static void main(String[] args) {
        Child child = new Child();
        child.print();
    }
}
class Father {
    String name;
    int age;
    void print(){
        System.out.println("hello world!");
    }
}

class Child extends Father{
    public Child(){
        super();
    }
    void print(){
        System.out.println("goodbye!!");
    }
}

调用了子类重写父类的方法print(),并成功输出子类的方法内容。 

2、有final修饰父类中的方法时

class Father {
    String name;
    int age;
    final void print(){
        System.out.println("hello world!");
    }
}

class Child extends Father{
    public Child(){
        super();
    }
    void print(){
        System.out.println("goodbye!!");
    }
}

程序报错,无法正常运行。因为被final修饰的方法不能被子类重写。 

3、final修饰变量

public class S4_2 {
    public static void main(String[] args) {
        final double PI = 3.14;
        PI = 666;
        System.out.println("PI is "+PI);
    }
}

PI被final修饰,此时PI为常量,必须在定义时赋值且只能赋值一次,在运行时值不能改变。 

 

如图,当为PI第二次赋值时,程序会报编译错误。

 

4、final修饰类

final class Father {
    String name;
    int age;
    void print(){
        System.out.println("hello world!");
    }
}

class Child extends Father{
    public Child(){
        super();
    }
    void print(){
        System.out.println("goodbye!!");
    }
}

由于final修饰的类不能被继承,因此在父类Father前用final修饰,继承操作会报编译错误。

3、实验题目:研究生薪资管理

(注:在职研究生继承学生类,实现雇员接口)

在学校中,学生每个月需x要交相应的生活费(2000元),雇员每个月有相应的工资(1000~3000随机生成),而在职研究生(on-the-job postgraduate)既是雇员又是学生,所以在职研究生既需要交学费又会有工资。下面要求编写一个程序来统计在职研究生的收入与学费,如果收入无法满足交学费,则输出“撸起袖子加油干!”信息。(思考:如果使用抽象类,是否能完成该要求?)

 

import java.util.Scanner;


public class S4_3 {
    public static void main(String[] args) {
        System.out.println("请输入该研究生姓名:");
        Scanner in = new Scanner (System.in);
        String name = in.nextLine();

        postGraduate s = new postGraduate();
        s.setName(name);

        System.out.println("请输入该研究生学费:");
        int fee =in.nextInt();
        s.setFee(fee);

        System.out.println("请输入该研究生薪资:");
        int salary=in.nextInt();
        s.setSalary(salary);
        if(s.getSalary() >= s.getFee()) {
            System.out.println("薪资超过学费");
        }else{
            System.out.println("撸起袖子加油干!");
        }
    }
}


class Student {
    private String name;
    private int fee;
    public void setFee(int fee) {
        this.fee=fee;
    }
    public int getFee() {
        return fee;
    }

    public void setName(String name) {
        this.name=name;
    }

    public String getName() {
        return name;
    }

}

interface Salary{
    public abstract void setSalary(int salary);
    public abstract int getSalary();
}

class postGraduate extends Student implements Salary {
    private String name;
    private int fee;
    private int salary;
    public void setSalary(int salary) {
        this.salary=salary;
    }

    public int getSalary() {
        return salary;
    }
}

 

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

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

相关文章

AI如何帮助Salesforce从业者找工作?

在当今竞争激烈的就业市场中,找到满意的工作是一项艰巨的任务。成千上万的候选人竞争一个岗位,你需要利用一切优势从求职大军中脱颖而出。 这就是AI的用武之地,特别是像ChatGPT这样的人工智能工具,可以成为你的秘密武器。本篇文章…

2.1、如何在FlinkSQL中读取写出到Kafka

目录 1、环境设置 方式1:在Maven工程中添加pom依赖 方式2:在 sql-client.sh 中添加 jar包依赖 2、读取Kafka 2.1 创建 kafka表 2.2 读取 kafka消息体(Value) 使用 format json 解析json格式的消息 使用 format csv 解析…

力扣第98题 验证二叉搜索树 c++ 与上一篇文章相似

题目 98. 验证二叉搜索树 中等 相关标签 树 深度优先搜索 二叉搜索树 二叉树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当…

淘宝天猫商品历史价格API接口

获取淘宝商品历史价格接口的步骤如下: 注册淘宝开放平台:首先在淘宝开放平台上注册一个账号,并进行登录。创建应用:在淘宝开放平台上创建一个应用,并获取该应用的App Key和App Secret,用于后续的接口调用。…

Python“梦寻”淘宝天猫店铺所有数据接口,淘宝店铺所有商品数据API接口,淘宝API接口申请指南(含代码示例)

获取淘宝店铺所有商品数据的接口可以通过淘宝开放平台获取。 具体操作步骤如下: 在淘宝开放平台注册成为开发者,并创建一个应用,获取到所需的 App Key 和 App Secret 等信息。使用获取到的 App Key 和 App Secret,进行签名和认证…

Android组件通信——Intent(二十三)

1. 认识Intent 1.1 知识点 (1)了解Intent的主要作用; (2)掌握Activity程序对Intent操作的支持; (3)可以使用Intent完成Activity程序间的跳转,也可以通过Intent接收返…

QT基础 QChart绘制折线

目录 1.简单折线 2.数学折线 3.可滑动折线 1.简单折线 //![1] //! 折现段坐标QLineSeries *series new QLineSeries(); //![1]//![2] //! 添加点series->append(0, 6);series->append(2, 4);series->append(3, 8);series->append(7, 4);series->append(10, 5)…

YOLOv7改进: CFP:即插即用的多尺度融合模块,EVC助力小目标检测| 顶刊TIP 2023

💡💡💡本文独家改进:即插即用的多尺度融合模块,EVC助力小目标检测 EVC | 亲测在多个数据集实现暴力涨点,强烈推荐,独家首发; 收录: YOLOv7高阶自研专栏介绍:http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOLOv7自研创新结合,轻松搞…

MS31804四通道低边驱动器可pin对pin兼容DRV8804

MS31804TE 是一个具有过流保护功能的四通道低边驱动器。MS31804TE 内置钳位二极管,用来钳制由电感负载续流产生的电压。MS31804TE 可以驱动单极步进电机、直流电机、继电器、螺线管或者其它负载。 散热良好的情况下,MS31804TE 可以提供每个通道最高 2A 的…

整理笔记——二极管

一、什么是二极管 二极管是一种由半导体材料制成的一种具有单向导电性能的电子元器件,二极管的核心是PN结。 加在二极管两端的电压和通关的电流被成为,二极管的伏安特性曲线 ​​​ 二极管的正向特性:起初正向电压较小时,正向电流…

[ACTF2020 新生赛]Exec1

拿到题目,不知道是sql注入还是命令执行漏洞 先ping一下主机 有回显,说明是命令执行漏洞 我们尝试去查看目录 127.0.0.1|ls,发现有回显,目录下面有个index.php的文件 我们之间访问index.php 输入127.0.0.1;cat index.php 发现又…

基于Springboot实现汽车租赁平台管理系统项目【项目源码】

基于Springboot实现汽车租赁平台管理系统演示 JAVA简介 Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,JSP(java ser…

选择适合自身业务的HTTP代理有哪些因素决定?

相信对很多爬虫工作者和数据采集的企业来说,如何选购适合自己业务的HTTP代理是一个特别特别困扰的选题,市面上那么多HTTP代理厂商,好像这家有这些缺点,转头又看到另外一家的缺点,要找一家心仪的仿佛大海捞针。今天我们…

Table.Group系列_第4参数为全局的情况下,利用第五参数进行分组汇总

原始数据: 部门与职位存在于同一列中 实现功能: 根据筛选条件,可对部门或职位进行统计汇总第一列列名根据筛选自动变更,显示当前统计的维度 实现方式: 1. 构建筛选器内容 在任意空白单元格内输入需要筛选的内容 2. 插入"组合框"控件,并进行相应设置 从开发工具…

flex布局在多层嵌套时,内层设置了justify-content: space-between;不生效问题

内层的地址和时间这一行&#xff0c;设置了justify-content: space-between;但并不生效&#xff0c;原因是要在上一层.center 设置 flex:1;&#xff08; 重点&#xff09; 经常忘记&#xff0c;特在此记录一下&#xff0c;以下是代码 <view class"index-card" c…

深度学习基础知识 BatchNorm、LayerNorm、GroupNorm的用法解析

深度学习基础知识 BatchNorm、LayerNorm、GroupNorm的用法解析 1、BatchNorm2、LayerNorm3、GroupNorm用法&#xff1a; BatchNorm、LayerNorm 和 GroupNorm 都是深度学习中常用的归一化方式。 它们通过将输入归一化到均值为 0 和方差为 1 的分布中&#xff0c;来防止梯度消失和…

学生用的台灯哪种比较好?分享专家推荐的学生台灯

对于学生来说&#xff0c;台灯是必不可少的一盏学习照明灯具&#xff0c;它能提供室内不足的光线、亮度&#xff0c;基本每个学生在宿舍、家里都会备着一台。不过台灯也并不是随便挑选一台使用就可以的&#xff0c;很多学生就是因为使用了一些价格低廉、质量安全没有保障的台灯…

【大数据】hadoop安装部署(学习笔记)

一、集群组成概述 Hadoop集群包括两个集群&#xff1a;HDFS集群、YARN集群 两个集群逻辑上分离、通常物理上在一起 两个集群都是标准的主从架构集群 HDFS集群&#xff08;分布式存储&#xff09;&#xff1a; 主角色&#xff1a;NameNode从角色&#xff1a;DataNode主角色…

代码随想录算法训练营第五十八天 |583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇

一、583. 两个字符串的删除操作 题目链接/文章讲解/视频讲解&#xff1a;代码随想录 思考&#xff1a; 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;以i-1为结尾的字符串word1&#xff0c;和以j-1位结尾的字符串word2&#xff0c;想要达…

postman 密码rsa加密登录-2加密密码

上一篇讲了获取公钥&#xff0c;将环境准备好之后&#xff0c;在登录接口的Pre-request Scrip 里&#xff0c;使用公钥进行加密后在正常登录。本文采用的方案是使用第三方模块forge.js来实现加密。 1、环境准备好&#xff0c;系统git 和node都OK。下载forge.js git clone htt…