第八章练习题-3

news2025/6/17 10:51:10

目录

第十三题

 题目

 Student类

Teacher类 

main类 

老师的代码 

Student类

 Teacher类

main类 

第七问:定义多态数组

main类

运行结果 

问题 

原因

解决办法

老师代码:main类

结果

 第八问

运行结果

第十四题

第十五题 

题目

方法的多态

对象的多态

第十六题


第十三题

 题目

先解决打印信息的问题

Person类

package com.hspedu.homework.homework13;

public class Person {
    private String name;
    private int age;
    private char sex;


    public Person(String name, int age, char sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String showInfo(){
       return "姓名:" + name + "\n年龄:" + age + "\n" + "性别:" + sex;
    }

    //play方法
    public String play(){
        return name + "爱玩";
    }

  

    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 char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }
}

 Student类

package com.hspedu.homework.homework13;

public class Student extends Person{

    private String stu_id;

    public Student(String name, int age, char sex, String stu_id) {
        super(name, age, sex);
        this.stu_id = stu_id;
    }

    @Override
    public String showInfo() {
        return super.showInfo() + "\n学号:" + stu_id;
    }
    @Override
    public String play() {
        return super.play() + "足球";
    }

    public void study(){
        System.out.println("我承诺,我会好好学习");
    }



    public String getStu_id() {
        return stu_id;
    }

    public void setStu_id(String stu_id) {
        this.stu_id = stu_id;
    }
}

Teacher类 

package com.hspedu.homework.homework13;

public class Teacher extends Person{
    private double work_age;

    public Teacher(String name, int age, char sex, double work_age) {
        super(name, age, sex);
        this.work_age = work_age;
    }

    @Override
    public String showInfo() {
        return super.showInfo() + "\n工龄:" + work_age;
    }

    @Override
    public String play() {
        return super.play() + "象棋";
    }

    public void teach() {
        System.out.println("我承诺,我会认真教课 ");
    }

    public double getWork_age() {
        return work_age;
    }

    public void setWork_age(double work_age) {
        this.work_age = work_age;
    }
}

main类 

在main类中创建对象并完成属性的初始化,然后按照打印要求,一一调用方法

package com.hspedu.homework.homework13;

public class HomeWork13 {
    public static void main(String[] args) {
        Teacher teacher = new Teacher("张飞", 30, '男', 5);
        Student student = new Student("小明", 15, '男', "00023102");
        System.out.println("老师的信息:");
        System.out.println(teacher.showInfo());
        teacher.teach();
        System.out.println(teacher.play());

        System.out.println("------------------");
        System.out.println("学生的信息:");
        System.out.println(student.showInfo());
        student.study();
        System.out.println(student.play());

     
    }

}

老师的代码 

老师主要是在子类中创建一个打印信息的方法,然后将各个方法都封装到打印信息的方法中,然后在main类中创建对象并直接调用就行

Student类

public void printInfo(){
        System.out.println("学生的信息:");
        System.out.println(super.showInfo());
        System.out.println(stu_id);
        study();
        System.out.println(play());
    }

 Teacher类

public void printInfo(){
        System.out.println("老师的信息:");
        System.out.println(super.showInfo());
        System.out.println("工龄" + work_age);
        teach();
        System.out.println(play());
    }

main类 

package com.hspedu.homework.homework13;

public class HomeWork13 {
    public static void main(String[] args) {
        Teacher teacher = new Teacher("张飞", 30, '男', 5);

        teacher.printInfo();
        System.out.println("------------------");
        Student student = new Student("小明", 15, '男', "00023102");
        student.printInfo();



    }

}

第七问:定义多态数组

 因为要输出属性,所以在Person类中重写toString方法

 @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }

main类

在main类中创建多态数组,并进行冒泡排序

package com.hspedu.homework.homework13;

public class HomeWork13 {
    public static void main(String[] args) {
        Teacher teacher = new Teacher("张飞", 30, '男', 5);


        //(7)定义多态数组,里面保存2个学生和2个教师,要求按年龄从高到低排序
        System.out.println("=========多态数组==========");
        Person[] person = new Person[4];
        person[0] = new Student("诸葛亮",26,'男',"3000456");
        person[1] = new Student("徐庶",24,'男',"3000457");
        person[2] = new Teacher("卢植",50,'男',14);
        person[3] = new Teacher("司马徽",48,'男',20);
        System.out.println("=========排序之前========");
        for (int i = 0; i < person.length; i++) {
            System.out.println(person[i]);
        }
        Person temp = null;
        for (int i = 0; i < person.length - 1; i++) {
            for (int j = 0; j < person.length - 1 - i; j++) {
                if(person[j].getAge() < person[j+1].getAge()){
                    temp = person[j];
                    person[j] = person[j+1];
                    person[j+1] = temp;
                }
            }

        }
        System.out.println("=========排序之后========");
        for (int i = 0; i < person.length; i++) {
            System.out.println(person[i]);
        }



    }

}

运行结果 

问题 

只输出了三个属性,子类特有的属性并没有输出

原因

没有在子类中重写toString方法

解决办法

在子类中重写toString方法,并用super调用父类的toString方法

老师代码:main类

在HomeWork13的main类之外写一个冒泡排序的方法,封装起来,然后在main方法中创建新对象并调用

package com.hspedu.homework.homework13;

public class HomeWork13 {
    public static void main(String[] args) {
        Teacher teacher = new Teacher("张飞", 30, '男', 5);

        //(7)定义多态数组,里面保存2个学生和2个教师,要求按年龄从高到低排序
        System.out.println("=========多态数组==========");
        Person[] person = new Person[4];
        person[0] = new Student("诸葛亮",26,'男',"3000456");
        person[1] = new Student("徐庶",24,'男',"3000457");
        person[2] = new Teacher("卢植",50,'男',14);
        person[3] = new Teacher("司马徽",48,'男',20);

        System.out.println("=========排序之前========");
        for (int i = 0; i < person.length; i++) {
            System.out.println(person[i]);
        }

        HomeWork13 homeWork13 = new HomeWork13();
        homeWork13.bubbleSort(person);

        System.out.println("=========排序之后========");
        for (int i = 0; i < person.length; i++) {
            System.out.println(person[i]);
        }

        

    }
    public void bubbleSort(Person[] person){//传进来一个Person类数组,数组类的元素都是编译类型是Person类的对象
        Person temp = null;
        for (int i = 0; i < person.length - 1; i++) {
            for (int j = 0; j < person.length - 1 - i; j++) {
                if(person[j].getAge() < person[j+1].getAge()){
                    temp = person[j];
                    person[j] = person[j+1];
                    person[j+1] = temp;
                }
            }

        }
    }
    

}

结果

 第八问

 在HomeWork13中main类之外新建一个方法test

 在main类中循环遍历,调用test方法(我原先的代码是传具体的对象进去,比如person[0]和person[2])

 //遍历多态数组,调用test方法
        System.out.println("=====================");
        for (int i = 0; i < person.length; i++) {
            homeWork13.test(person[i]);
        }

运行结果

 

 

第十四题

 

package com.hspedu.homework.homework14;

public class HomeWork14 {
    public static void main(String[] args) {
        C c = new C();
        //考察知识点:在调用子类的构造器时会默认调用父类的无参构造器
        //this和super不能同时出现在构造器(都需要在构造器的第一行)
        //可以用super调用父类指定的构造器
        //this调用本类的成员

        //输出结果
        //1、我是A类
        //2、hahah我是B类的有参构造
        //3、我是c类的有参参构造
        //4、我是c类的无参参构造
    }
}
class A{
    public A(){
        System.out.println("我是A类");
    }
}

class B extends A {
    public B() {
        System.out.println("我是B类的无参构造");
    }

    public B(String name) {
        System.out.println(name + "我是B类的有参构造");
    }
}
class C extends B{
    public C(){
        this("hello");
        System.out.println("我是c类的无参构造");
    }
    public C(String name){
        super("hahah");
        System.out.println("我是c类的有参参构造");
    }

}

第十五题 

题目

方法的多态

package com.hspedu.homework.homework15;

public class HomeWork15 {
    public static void main(String[] args) {
        //什么是多态?多态具体体现在哪里?可以举例说明
        //多态的定义:顾名思义就是多种形态,包括方法的多态和对象的多态
        //是OOP的第三大特征,是建立在封装和继承的基础上的
        //方法的多态:方法的重写和重载
        A a = new A();
        a.test1218();
        B b = new B();
        b.test1218();
        b.f1(12,35);
        b.f2(12,35.5);

    }
}
class A{
    public void test1218(){
        System.out.println("A类的test1218方法");
    }
}
class B extends A{
    @Override
    public void test1218() {//方法重写
        System.out.println("B类重写A类的test1218方法");
    }

    public void f1(int n1, int n2){
        System.out.println(n1+n2);
    }
    public void f2(int n3,double n4){
        System.out.println(n3+n4);
    }
}

对象的多态

package com.hspedu.homework.homework15;

public class HomeWork1501 {
    public static void main(String[] args) {
        //对象的多态(核心,重点,难点)
        //(1)对象的编译类型和运行类型可以不一致
        //(2)一个对象的编译类型在创建的时候就已经确定了,是不能变化的
        //(3)运行类型是可以变化的,可以通过getClass()来查看运行类型(getClass()是Object类的方法)
        //(4)编译类型看=左边,运行类型看=右边

        AA03 obj = new BB03();//向上转型
        AA03 b1 = obj;//b1和obj指向同一个对象
        System.out.println("obj的运行类型=" + obj.getClass());
        System.out.println("b1的运行类型=" + b1.getClass());

        //运行类型是可以改变的
        obj = new CC03();//也是向上转型,运行类型变成了CC03
        System.out.println("obj的运行类型=" + obj.getClass());
        obj = b1;//此时运行类型又变成了BB03
        System.out.println("obj的运行类型=" + obj.getClass());

    }
}
class AA03{

}
class BB03 extends AA03{}
class CC03 extends BB03{}

第十六题

 在运行过程中,方法的调用是由对象的运行类型,运行类型是哪个类,就首先调用此类中的方法,如果此类中没有,按照继承的查找原则,依次向上查找并调用(同时需要遵循访问修饰符原则)

属性和对象不同,没有对象绑定机制是在哪里声明就在哪里调用,

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

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

相关文章

HFSS使用经验三

目录 一、如何量取HFSS某一点的空间位置 二、如何快速的切换视图 三、HFSS中绘制圆柱体 四、如何修改HFSS的仿真线程数量 五、HFSS中如何选取挖空的面 六、HFSS中如何实现参数扫描 一、如何量取HFSS某一点的空间位置 右击可以点击Measure按键 鼠标放到特殊点&#xff0c…

2023年申请发明专利的重要性和注意问题。

随着对知识产权意思的逐步提高&#xff0c;企业对知识产权越来越关心。知识产权包括专利权、商标权和著作权。专利包含发明专利专利、实用新型专利、外观设计专利。其中发明专利的申请难度最大&#xff0c;含金量最高。根据小编申请发明专利方面20年的经验&#xff0c;简单介绍…

【Windows|WSL|Ubuntu|VSCode】流程记录|坑点模糊回忆

无限踩坑&#xff0c;悲惨回忆&#xff0c;又似乎毫无意义&#xff1f; 1.安装WSL 官方文档&#xff1a;Install WSL | Microsoft Learn 简单来说&#xff0c;管理员身份运行PowerShell wsl --install 通常需要wsl2&#xff0c;得益于其优势&#xff0c;通过 PowerShell w…

用ERP系统做数据管理对企业有什么好处?

ERP系统数据管理解决方案是以业务为主导的工具&#xff0c;为所有的业务流程和操作创建一个单一的主记录&#xff0c;包括来自各种内部和外部应用和来源的人员和系统。 大多数企业采用不同的系统&#xff0c;包含客户、产品、销售、交易等信息数据存储在许多不同的地方&#…

葵花宝典之C语言冷知识(二)

目录 &#x1f693;&#xff08;一&#xff09;图形的打印 &#x1f699;判断类型 &#x1f68c;逻辑简单易找规律型。 &#x1f68c;存在坐标规律的图案打印 &#x1f693;&#xff08;二&#xff09;中值的表达形式 &#x1f699;(xy)/2 表达错误的原因 &#x1f699;有符号数…

Python编程课程好学吗?能学会吗?

Python编程课程好学吗&#xff1f;能学会吗&#xff1f;Python是一种计算机程序设计语言&#xff0c;一种面向对象的动态类型语言&#xff0c;最初被设计用于编写自动化脚本(shell)&#xff0c;随着版本的不断更新和语言新功能的添加越来越多被用于独立的大型项目的开发。 编程…

mvn和npm的那些事

1 mvn简介 mvn就好比java中的maven,用于管理包版本,mvn用于管理node版本,而npm来源于node中,比如用于拉取仓库中的依赖包,在构建使用项目时可以选择指定的版本,从而避免编译出错运行失败等问题 Node.js17或更高版本中出现Error: error:0308010C:digital envelope routine…

CSDN如何使用Markdown编辑器

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

Pytest自动化测试 - 完美结合Allure

简介 Allure Framework是一种灵活的、轻量级、多语言测试报告工具。 不仅可以以简洁的网络报告形式非常简洁地显示已测试的内容&#xff0c; 而且还允许参与开发过程的每个人从日常执行中提取最大程度的有用信息和测试。 从开发/测试的角度来看&#xff1a; Allure报告可以…

四大蓝牙天线设计方式

https://www.elecfans.com/d/686538.html 一直以来&#xff0c;无论是智能手机&#xff0c;还是笔记本电脑&#xff0c;亦或是平板电脑&#xff0c;蓝牙都是智能设备的标配。随着移动互联网的发展&#xff0c;现在涌现出大量的智能可穿戴设备&#xff0c;而支撑这些应用的发展不…

Spring AOP源码解析——专治你不会看源码的坏毛病!

虽然现在大厂内卷现象泛滥&#xff0c;而且996的传统依旧肆虐。但没有哪位程序员能架得住互联网大厂的高薪职位诱惑。特别是我还有一位在阿里工作7年多的老表&#xff0c;在其耳旁风之下&#xff0c;不断将大厂描绘的美丽风景刻画在我脑海中&#xff0c;也让我一直有着想进大厂…

架构设计(八):数据库的水平扩展和垂直扩展

架构设计&#xff08;八&#xff09;&#xff1a;数据库的水平扩展和垂直扩展 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;架构设计&#xff08;八&#xff09;&#xff1a;数据库的水平扩展和垂直扩展 CSDN&#xff1a;架构设计&#xff08;八&#xf…

Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))

3 Redis列表(List) 3.1 简介 单键多值 Redis 列表是简单的字符串列表&#xff0c;按照插入顺序排序。你可以添加一个元素到列表的头部&#xff08;左边&#xff09;或者尾部&#xff08;右边&#xff09;。 它的底层实际是个双向链表&#xff0c;对两端的操作性能很高&#x…

组件技术--设计--MVC模式+DAO+MySQL+jsp+servlet 简单的购物车案例

MVC模式DAOMySQLjspservlet 简单的购物车案例题外话购物车案例需求核心系统组成Javaweb项目框架基本思想核心代码DaoBookDaolistenerSessionListenerservletAddServletInitServletRemoveServletvoBook.jspbuyForm.jspshowAllBook.jspshowCart.jsptargetpom.xmlWEB-INFweb.xmlli…

python绘图——坐标轴

1. 2D坐标轴 1.1 绘制简单的曲线 import matplotlib.pyplot as plt import numpy as np xnp.linspace(-1,1,50)#-1到1中画50个点 yx**2 plt.plot(x,y,colorgreen) plt.tick_params(axisx,colorsblue) plt.tick_params(axisy,colorsred) plt.show()作图&#xff1a; 1.2 坐标…

游戏开发 LinkedList

inkedList底层是双向链表&#xff0c;一个节点挂着一个节点LinkedList不需要设定长度&#xff0c;不需要扩容LinkedList 的优缺点 优点 ① 往里面插入一些元素的时候不需要像ArrayList数组那样需要挪动大量的元素了&#xff0c;直接在链表里加入一个节点就可以了 ② 如果要不断…

【数据结构】LinkedList与双向链表

目录 一、认识集合类LinkedList 1、认识 2、构造方法 二、实现双向非循环链表 1、准备 2、方法的实现 1.遍历 2.有效节点个数 3.是否包含key 4.清空链表 5.头插法 6.尾插法 7.指定位置插入 8.删除第一次出现的key 9.删除所有的key 一、认识集合类LinkedList 1、认…

第01讲:Linux系统下Redis的安装及配置

本文所安装的Redis版本为5.0.4&#xff0c;请自行到官网下载&#xff0c;或者私信博主 前言&#xff1a;什么是Redis 介绍Redis之前&#xff0c;先了解下NoSQL &#xff08;Not only SQL&#xff09;不仅仅是SQL属于非关系型数据库&#xff1b;Redis就属于非关系型数据库传统的…

【AJAX】入门AJAX

入门AJAXAJAX概述AJAX的使用XMLHttpRequest创建XMLHttpRequest对象XMLHttpRequest对象的常用方法XMLHttpRequest对象的常用属性使用AJAX POST请求实现‘判断用户名’案例实现步骤模拟数据库表单前端代码后端程序效果展示AJAX概述 什么是AJAX&#xff1f; AJAX全称&#xff08;…

聊聊如何利用redis实现多级缓存同步

前言 前阵子参加业务部门的技术方案评审&#xff0c;故事的背景是这样&#xff1a;业务部门上线一个专为公司高管使用的系统。这个系统技术架构形如下图 按理来说这个系统因为受众很小&#xff0c;可以说基本上没并发&#xff0c;业务也没很复杂&#xff0c;但就是这么一个系…