Java学习之继承练习题

news2025/1/13 5:51:31

目录

第一题

代码

输出流程分析

运行结果

考察知识点

第二题

 代码

流程分析

运行结果

 第三题

题目要求

我的代码

代码改进


第一题

代码

package com.hspedu.extends_.exercise;

public class ExtendsExercise01 {
    public static void main(String[] args) {
        B b = new B();
    }
}
class A {
    A(){//默认的无参构造器
        System.out.println("a");
    }
    A(String name){
        System.out.println("a name");
    }
}
class B extends A {
    B(){
        //已经有this就不会有super了
        this("abc");
        System.out.println("b");
    }
    B(String name){
        super();
        System.out.println("b name");
    }
}

输出流程分析

1)调用B类无参构造器,因为构造器内第一行有this(),所以不会再调用父类的无参构造器

2)执行this("abc");

3)执行super();

4)执行父类即A类的无参构造器,输出a(第一次输出)

5)输出b name(第二次输出)

6)输出 b (第三次输出)

运行结果

考察知识点

1)当创建子类对象时, 不管使用子类的哪个构造器, 默认情况下总会去调用父类的无参构造器

2)在构造器中,this()和super()不能同时使用

第二题


 代码

package com.hspedu.extends_.exercise;

public class ExtendsExercise02 {
    public static void main(String[] args) {
        C1 c1 = new C1();
    }
}
class A1 {
    public A1(){
        System.out.println("我是A类");
    }
}
class B1 extends A1 {
    public B1(){
        System.out.println("我是B类的无参构造");
    }
    public B1(String name) {
        System.out.println(name + "我是B类的有参构造");
    }
}

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

    }
}

流程分析

1)调用this("hello");

2)调用super("hahah");

3)调用

public B1(String name) {
    System.out.println(name + "我是B类的有参构造");
}

需要先调用这个子类的父类的无参构造器

4)调用

class A1 {
    public A1(){
        System.out.println("我是A类");
    }
}
 

第一次输出:我是A类

第二次输出:hahah我是B类的有参构造

第三次输出:我是c类的有参构造

第四次输出:我是c类的无参构造

运行结果

 第三题

题目要求


1)编写 Computer 类, 包含 CPU、 内存、 硬盘等属性, getDetails 方法用于返回 Computer 的详细信息
2)编写 PC 子类, 继承 Computer 类, 添加特有属性【品牌 brand】
3)编写 NotePad 子类, 继承 Computer 类, 添加特有属性【color】
4)编写ExtendsExercise03类, 在 main 方法中创建 PC 和 NotePad 对象, 分别给对象中特有的属性赋值(即在创建对象的时候就完成对象属性的初始化), 以及从 Computer 类继承的属性赋值, 并使用方法并打印输出信息(在子类中创建打印信息的方法,然后调用

我的代码

package com.hspedu.extends_.exercise;

public class Computer {
    //编写 Computer类,包含 CPU、 内存、 硬盘等属性,
    // getDetails 方法用于返回 Computer 的详细信息
    private String cpu;
    private int memory;
    private int disk;
    //有参构造器,完成对象属性的初始化
    public Computer(String cpu, int memory, int disk) {
        this.cpu = cpu;
        this.memory = memory;
        this.disk = disk;
    }
    //全是private属性,创建public方法访问
    public String getCpu() {
        return cpu;
    }

    public int getMemory() {
        return memory;
    }

    public int getDisk() {
        return disk;
    }

    public String getDetails(){
        return "电脑CPU " + cpu + " 内存" + memory
                + " 硬盘" + disk;
    }


}
package com.hspedu.extends_.exercise;
//因为子类默认加载父类的无参构造器,但是父类定义了有参构造器,所以此处会报错
//解决方法:用super()指定构造器
public class PC extends Computer{
    private String brand;

    public PC(String cpu, int memory, int disk, String brand) {
        super(cpu, memory, disk);
        this.brand = brand;
    }

    public String getBrand() {
        return brand;
    }
    public void showInfo(){
        System.out.println(getDetails() + " 品牌" + brand);
    }
}
package com.hspedu.extends_.exercise;

public class NotePad extends Computer{
    private String color;
    //根据继承的规则,此处会自动调用父类的构造器
    //即父类构造器完成父类属性的初始化
    //子类构造器完成子类属性的初始化
    public NotePad(String cpu, int memory, int disk, String color) {
        super(cpu, memory, disk);
        this.color = color;
    }

    public String getColor() {
        return color;
    }
    public void showInfo(){
        System.out.println(getDetails() + " 颜色" + color);
    }

}

运行类

package com.hspedu.extends_.exercise;
// 在main方法中创建PC和NotePad对象,分别给对象中特有的属性赋值,
//以及从Computer类继承属性赋值,并使用方法并打印输出信息
//题目含义:创建PC类和NotePad对象,分别给他们的父类属性和子类属性赋值
//打印出这两个对象的属性信息
public class ExtendsExercise03 {
    public static void main(String[] args) {
        PC pc = new PC("AMD",16,340,"联想");
        pc.showInfo();
        NotePad notePad = new NotePad("intel", 8, 400, "白色");
        notePad.showInfo();
    }
}


结果

 

 

代码改进

 

用get和set方法完成封装

父类:Computer

package com.hspedu.extends_.exerciseteacher;

public class Computer {
    private String CPU;
    private int memory;
    private int disk;
    //构造器
    public Computer(String CPU, int memory, int disk) {
        this.CPU = CPU;
        this.memory = memory;
        this.disk = disk;
    }
    //封装

    public String getCPU() {
        return CPU;
    }

    public void setCPU(String CPU) {
        this.CPU = CPU;
    }

    public int getMemory() {
        return memory;
    }

    public void setMemory(int memory) {
        this.memory = memory;
    }

    public int getDisk() {
        return disk;
    }

    public void setDisk(int disk) {
        this.disk = disk;
    }
    //返回信息
    public String getDetails(){
        return "CPU=" + CPU + " memory=" + memory +
                " disk=" + disk;
    }
}

 子类:PC

package com.hspedu.extends_.exerciseteacher;

public class PC extends Computer{
    private String brand;

    public PC(String CPU, int memory, int disk, String brand) {
        super(CPU, memory, disk);
        this.brand = brand;
    }
    //封装

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }
    //返回信息
    public void printInfo(){
        System.out.println("======PC信息如下======");
        System.out.println(getDetails() + " brand=" + brand);
    }
}

子类:NotePad

package com.hspedu.extends_.exerciseteacher;

public class NotePad extends Computer{
    private String color;

    public NotePad(String CPU, int memory, int disk, String color) {
        super(CPU, memory, disk);
        this.color = color;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
    public void printInfo(){
        System.out.println("======NotePad信息如下======");
        System.out.println(getDetails() + " color=" + color);
    }
}
package com.hspedu.extends_.exerciseteacher;

public class ExtendsExercise03 {
    public static void main(String[] args) {
        PC pc = new PC("AMD", 16, 350, "苹果");
        pc.printInfo();
        NotePad notePad = new NotePad("intel", 8, 400, "银灰色");
        notePad.printInfo();
    }
}

运行结果

 

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

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

相关文章

Mybatis Plus 多租户id使用

本文就不多逼逼,直接进入正题。 什么是多租户 多租户技术(Multi-TenancyTechnology)又称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下 (此处的多用户一般是面向企业用…

SpringCloud服务配置介绍Nacos实现管理配置

目录 一、服务配置中心介绍 二、Nacos config入门 三、Nacos config深入 四、Nacos的几个概念 一、服务配置中心介绍 首先我们来看一下,微服务架构下关于配置文件的一些问题: 配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的…

uniapp 智能安装(自动升级)插件 Ba-SmartUpgrade

简介(下载地址) Ba-SmartUpgrade 是一款用于智能安装(自动升级)的插件,无需用户的任何操作就可以自动安装程序。 说明 在app升级更新,覆盖安装时,系统会弹出授权提示弹窗,需要用户…

两种PDF密码都忘记了,怎么办?

PDF文件的两种密码:打开密码、编辑限制 两种密码加密PDF文件后的效果是不一样的: 设置了打开密码的PDF文件,是在打开文件的时候需要输入密码,输入了正确的PDF密码,进入到文件之后,就一些都正常了&#xf…

Pr:编辑字幕

对于添加好的字幕,可在文本面板中的“字幕”选项卡、时间轴面板或节目面板上进行编辑。需要时,可在基本图形面板中改变字幕的样式。“字幕”选项卡中显示了当前活动字幕轨道上的各个字幕分段的编号、时间码范围、文本内容等。单击左下角的“ABC”按钮可改…

Word文档的两种密码忘记了,怎么办?

Word文档的密码也有两种:一种是打开密码,一种是编辑限制 两种密码加密后的效果也是不一样的: 设置了打开密码的Word文档,是在打开文件的时候需要输入密码,保护文件内容不被其他人看到。当我们输入了正确的Word密码&a…

【元胞自动机】元胞自动机短消息网络病毒传播仿真【含Matlab源码 1289期】

⛄一、元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 何顿 康威设计了一个电脑游戏 “生命游戏” 后, 元胞自动机才吸引了科学家们的注意. 1983 年…

第一个maven项目(idea)

配置Maven 确保idea与你要使用的maven版本不冲突,否则使用idea内置即可。 手工创建Java项目 在test目录下,新建resources,如果不是测试资源根,右键将目录标记为: 原型创建Java项目 原型创建Web项目 插件 配置tomcat插…

数据结构与算法之《单链表》详解

标题:单链表的思路及代码实现 作者:Ggggggtm 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 文章目录: 引入 一、链表的概念及结构 1.1 链表的概念 1.2 链表的结构 二、链表的思…

单文件组件:dom高亮插件、在父组件中引入子组件、App.vue代码代码写法

输入<template>等dom为什么会有高亮显示&#xff1f; 下载Vetur插件&#xff1a; 模板会自动帮你导出&#xff0c;但是js文件不会&#xff0c;需要你手动导出&#xff0c;启动的服务器&#xff0c;只会热更新&#xff0c;如果想要刷新整个页面就自己手动刷新&#xff1b…

2022.11.29总结

今天写了条件查询 虽然思路上还说是比较顺&#xff0c;但是还是写了一晚上&#xff0c;因为老是在细节上出现bug&#xff0c;改了好久&#xff0c;踩了好几个坑。 首先大概是因为组件不是确定的&#xff0c;我把ref属性绑定在router-view上&#xff0c;导致我获取不到条件选择…

[附源码]Python计算机毕业设计SSM基于Java的校园二手平台交易系统(程序+LW)

环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 Maven管理等…

SpringBoot+html+vue模板开发备忘录

除了对某个表基本的增删改查以外&#xff0c;可能需要额外的增加操作&#xff0c;这里是通过按钮来实现的 1、新增一个测试按钮 <el-button type"primary" class"butT" click"test()">测试</el-button> 2、这个按钮绑定一个方法t…

CFDP:聚类算法

Clustering by Fast Search and Find of Density Peaks(CFDP) - 发表于2014 science期刊 聚类算法&#xff0c;作为机器学习里常用的一种无监督方法&#xff0c;一直以来都受到很大的关注。聚类算法&#xff0c;是希望把同一类的样本或者样本聚到一起&#xff0c;比如说常见的…

BIRT 横向分栏

【问题】 I have a table which will displays User ids in one column. I want to display that column as two columns Ex. In First Row, First user id in Column 1 and Second user id in Column2, In Second Row, second user id in Column 1 and third user id in Co…

教育机构客户管理系统功能方案详解!

前言&#xff1a; 教育机构客户管理系统怎么做&#xff1f;哪个好&#xff1f;还在为客户流失而烦恼的你&#xff0c;一定很困恼&#xff0c;别人是怎么留住客户的呢&#xff1f;今天就来告诉你。 随着我国产业结构升级&#xff0c;在政策顶层推动和经济主体需求转变的共同影…

nlp工具库spacy

文章目录spacy能做什么如何安装案例 分词功能spacy是一个辅助自然语言处理的工具库。 spacy能做什么 它集成了各种实用的句子分析功能&#xff0c;包括分词、词性分析、词性还原等等&#xff0c;所有功能特性可参考官网 spacy-101的features一章&#xff0c;有Tokenization、…

ROS MarkerArray的几种常见用法

ros使用过程中&#xff0c;经常会用到rviz可视化各种数据。而在rviz中&#xff0c;marker与markerarray是常用的一种可视化工具&#xff0c;最近也用到过几次了&#xff0c;这里随手记录一下。 1、makerarray画线 在marker中常见的就是表示两点之间的连线&#xff0c;而marke…

【LeetCode】1752. 检查数组是否经排序和轮转得到

题目描述 给你一个数组 nums 。nums 的源数组中&#xff0c;所有元素与 nums 相同&#xff0c;但按非递减顺序排列。 如果 nums 能够由源数组轮转若干位置&#xff08;包括 0 个位置&#xff09;得到&#xff0c;则返回 true &#xff1b;否则&#xff0c;返回 false 。 源数组…

怎么提高外贸开发信的回复率?

写客户开发信是每个外贸人都必备的技能。对于成本预算小的企业来讲&#xff0c;开发信是性价比非常高的一种方式。但是&#xff0c;很多人在写完开发信之后并没有收获到比较好的回复效果&#xff0c;可能是因为他们没有把握写开发信的技巧。怎么提高外贸开发信的回复率&#xf…