Java作业练习_第六周作业多态性(小白学习记录,仅供参考,有错指出)

题目排序(点击直达)

    • 第一题
    • 第二题
    • 第三题
    • 第四题
    • 第五题
    • 第六题
    • 第七题
    • 第八题
    • 免责声明

第一题

写出下列程序的运行结果:

package com.cxl.ch5.demo5;
public class Base {int m=0;public int getM(){return m;}
}
package com.cxl.ch5.demo5;public class Sub extends Base{int m=1;public int getM(){return m;}
}
package com.cxl.ch5.demo5;
public class MyTest {public static void main(String[] args) {Sub sub=new Sub();System.out.println(sub.m);System.out.println(sub.getM());}
}

运行结果:

1
1

第二题

仔细阅读下列程序,写出程序的运行结果。

public class Man {void drink(){System.out.println("drink water");}
}
class OldMan extends Man{void drink(){System.out.println("drink tea");}
}
class YoungMan extends Man{void drink(){System.out.println("drink beer");}void dance(){System.out.println("can dance");}
}
public class ManTest {public static void main(String[] args) {Man tom=new Man();Man jack=new YoungMan();Man mary=new OldMan();tom.drink();jack.drink();mary.drink();if(jack instanceof YoungMan){((YoungMan)jack).dance();}}
}

运行结果:

drink water
drink beer
drink tea
can dance

第三题

写出下列程序的输出结果。

package com.cxl.ch5.demo3;
public abstract class LivingThings {public abstract String feature();
}
package com.cxl.ch5.demo3;public class Animal extends LivingThings {String mouth;public Animal() {}public Animal(String mouth) {this.mouth = mouth;}@Overridepublic String feature() {return mouth;}
}
package com.cxl.ch5.demo3;
public class Plant extends LivingThings {String leaf;public Plant() {}public Plant(String leaf) {this.leaf = leaf;}@Overridepublic String feature() {return leaf;}
}
package com.cxl.ch5.demo3;
public class Example {public static void main(String[] args) {Animal animal=new Animal("嘴巴");System.out.println(animal.feature());Plant plant=new Plant("叶子");System.out.println(plant.feature());}
}

运行结果:

嘴巴
竹子

第四题

编程体,设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声,要求如下。
1)编写抽象类Animal
Animal抽象类有2个抽象方法cry()和getAnimalName(),即要求各种具体的动物给出自己的叫声和种类名称。

2)编写模拟器类Simulator
该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型。即参数animal可以调用Animal的子类重写的cry方法播放具体动物的声音,调用子类重写的getAnimalName()方法显示动物种类的名称。
3)编写Animal类的子类:Dog和cat类
4)编写主类Application,
在主类Application的main方法中至少包含如下代码。
Simulator simulator=new Simulator();
Simulator.playSound(new Dog());
Simulator.playSound(new Cat());
Animal.java 文件

package cn.fjsay.java.demo4;
public abstract class Animal {public abstract void cry();public abstract String getAnimalName();
}

Cat.java 文件

package cn.fjsay.java.demo4;
class Cat extends Animal {@Overridepublic void cry() {System.out.println("Cat meows");}@Overridepublic String getAnimalName() {return "Cat";}
}

Dog.java文件

package cn.fjsay.java.demo4;class Dog extends Animal {@Overridepublic void cry() {System.out.println("Dog barks");}@Overridepublic String getAnimalName() {return "Dog";}
}

Simulator.java 文件

package cn.fjsay.java.demo4;class Simulator {public void playSound(Animal animal) {animal.cry();System.out.println("Animal type: " + animal.getAnimalName());}
}

Test.java 文件

package cn.fjsay.java.demo4;public class Test {public static void main(String[] args) {Simulator simulator = new Simulator();simulator.playSound(new Dog());simulator.playSound(new Cat());}
}

运行结果:

Dog barks
Animal type: Dog
Cat meows
Animal type: Cat

第五题

面向抽象的编程,实现面向对象的设计原则“开闭原则”。

1定义手机类,包含有手机卡。手机与卡是关联关系,手机关联一个抽象的卡类,使得手机可以换卡,
2定义抽象的卡类SIM,该抽象类有3个抽象方法,即 getNumber(),setNumber()和getCorpName()。
3定义移动卡是抽象卡的子类,在子类中重写父类的所有抽象方法。
4定义联通卡是抽象类的子类,在子类中重写父类的所有抽象方法。
5定义一个主类,在主类的主方法中实例化一个手机,手机使用的是移动卡,电话号码是1825678956。
由于资费高,后此手机又换了联通卡,电话号码是13256891478。

CmSimCard.java文件

package cn.fjsay.java.demo5;public class CmSimCard extends SimCard {private String number;@Overridepublic String getNumber() {return number;}@Overridepublic void setNumber(String number) {this.number = number;}@Overridepublic String getCorpName() {return "移动卡";}
}

CuSimCard.java文件

package cn.fjsay.java.demo5;public class CuSimCard extends SimCard{private String number;@Overridepublic String getNumber() {return number;}@Overridepublic void setNumber(String number) {this.number = number;}@Overridepublic String getCorpName() {return "联通卡";}
}

Phone.java文件

package cn.fjsay.java.demo5;public class Phone {private SimCard simCard;public void changeSimCard(SimCard newSimCard) {simCard = newSimCard;}public void makeCall() {String number = simCard.getNumber();System.out.println("手机使用的是移动卡" + simCard.getCorpName() + "电话号码是" + number);}
}

SimCard.java文件

package cn.fjsay.java.demo5;public abstract class SimCard {public abstract String getNumber();public abstract void setNumber(String number);public abstract String getCorpName();
}

Test.java 文件

package cn.fjsay.java.demo5;public class Test {public static void main(String[] args) {Phone p = new Phone();SimCard m = new CuSimCard();m.setNumber("1825678956");p.changeSimCard(m);p.makeCall();SimCard cu = new CuSimCard();cu.setNumber("13256891478");p.changeSimCard(cu);p.makeCall();}
}

运行结果:

手机使用的是移动卡联通卡电话号码是1825678956
手机使用的是移动卡联通卡电话号码是13256891478

第六题

编程题,创建一个含有指向某对象的空白final引用的类,在所有构造方法内部都执行空白final的初始化动作,说明Java确保final在使用前必须被初始化,且一旦被初始化即无法改变。下列程序给出了部分代码。请补充完成。

class Poppet{int i;Poppet(){}Poppet(int i){this.i=i;}
}
public class BlankFinal {final Poppet poppet;
}

BlankFinal.java

package cn.fjsay.java.demo6;public class BlankFinal {final Poppet poppet;public BlankFinal() {poppet = new Poppet(); // 在构造方法中初始化空白final引用}public BlankFinal(int i) {poppet = new Poppet(i); // 在构造方法中初始化空白final引用}
}

Poppet.java文件

package cn.fjsay.java.demo6;public class Poppet {int i;Poppet() {}Poppet(int i) {this.i = i;}
}

Test.java 文件

package cn.fjsay.java.demo6;public class Test {public static void main(String[] args) {BlankFinal blankFinal1 = new BlankFinal();BlankFinal blankFinal2 = new BlankFinal(10);System.out.println(blankFinal1.poppet.i);System.out.println(blankFinal2.poppet.i);}
}

运行结果:

0
10

第七题

多态性编程题。1动物Animal可以发出叫声,void cry(){}
2子类猫Cat重写父类的cry方法,发出喵喵的叫声。
3子类Dog重写父类的cry方法,发出汪汪的叫声。
4在测试类的主方法中,编写多态的代码,父类的对象指向不同的子类实体。上转型对象调用子类重写的方法。运行期后期动态绑定方法。
Animal.java 文件

package cn.fjsay.java.demo7;public class Animal {public void cry() {System.out.println("Animal is crying");}
}

Cat.java 文件

package cn.fjsay.java.demo7;public class Cat extends Animal {@Overridepublic void cry() {System.out.println("The cat is meowing");}
}

Dog.java文件

package cn.fjsay.java.demo7;public class Dog extends Animal {@Overridepublic void cry() {System.out.println("The dog is barking");}
}

Test.java 文件

package cn.fjsay.java.demo7;public class Test {public static void main(String[] args) {Animal a1 = new Cat();Animal a2 = new Dog();a1.cry();a2.cry();}
}

运行结果“

The cat is meowing
The dog is barking

第八题

多态性编程题。
1定义一个抽象的AbstractShap类,类体中定义了抽象的方法double area();void draw();
2编写AbstractShape的子类长方形类,在长方形类中重写父类的所有抽象方法。
3编写AbstractShape的子类圆形类,在圆形类中重写父类的所有抽象方法。
4编写测试类,在主类的主方法中,通过上转型对象调用方法,分别调用子类重写的方法。
AbstractShape.java文件

package cn.fjsay.java.demo8;public abstract class AbstractShape {public abstract double area();public abstract void draw();
}

Circle.java 文件

package cn.fjsay.java.demo8;class Circle extends AbstractShape {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double area() {return Math.PI * radius * radius;}@Overridepublic void draw() {System.out.println("圆形");}
}

Rectangle.java 文件

package cn.fjsay.java.demo8;class Rectangle extends AbstractShape {private double length;private double width;public Rectangle(double length, double width) {this.length = length;this.width = width;}@Overridepublic double area() {return length * width;}@Overridepublic void draw() {System.out.println("长方形");}
}

Test.java文件

package cn.fjsay.java.demo8;public class Test {public static void main(String[] args) {AbstractShape shape1 = new Rectangle(5, 3);AbstractShape shape2 = new Circle(2.5);shape1.draw();System.out.println("面积: " + shape1.area());shape2.draw();System.out.println("面积: " + shape2.area());}
}

运行结果:

长方形
面积: 15.0
圆形
面积: 19.634954084936208

免责声明

本文章所有的图片以及代码等仅作为学习使用,不作为商业目的,如有侵权请联系我删除!
所提供的代码仅供参考,有很多不足请自行补充!

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

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

相关文章

第18章 JDK8-17新特性

1. Java版本迭代概述 1.1 发布特点(小步快跑,快速迭代) 发行版本发行时间备注Java 1.01996.01.23Sun公司发布了Java的第一个开发工具包Java 5.02004.09.30①版本号从1.4直接更新至5.0;②平台更名为JavaSE、JavaEE、JavaMEJava 8…

复杂度的讲解

1.算法效率 如何衡量一个算法的好坏?从两个维度,时间和空间(算法运行的快慢,消耗的空间大不大)。因为计算机硬件领域的高速发展,如今计算机的存储量已经达到了一个很高的程度,所以现在我们一般…

代码随想录算法训练营DAY15|C++二叉树Part.2|102.二叉树的层序遍历、226.翻转二叉树、101. 对称二叉树

文章目录 102.二叉树的层序遍历思路伪代码迭代法递归法 CPP代码拓展题 226.翻转二叉树思路CPP代码 101. 对称二叉树伪代码CPP代码 102.二叉树的层序遍历 力扣题目链接 文章讲解:102.二叉树的层序遍历 视频讲解:讲透二叉树的层序遍历 | 广度优先搜索 | Le…

微信公众号如何开通留言功能?

首先,我们需要了解为什么现在注册的公众号没有留言功能。这是因为所有在2018年之后注册的微信公众号都无法再自带留言功能。这一变化是根据微信的通知而实施的。自2018年2月12日起,微信对新注册的公众号进行了调整,取消了留言功能。这一决策主…

MySQL - 基础二

6、表的增删改查 CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) 6.1、Create 语法: INSERT [INTO] table_name[(column [, column] ...)]VALUES (value_list) [, (value_list)] ...value_list: v…

static关键字总结

static关键字的使用1. static: 静态的2. static 用来修饰的结构:属性、方法; 代码块、内部类;3. static修饰属性3.1 复习:变量的分类方式1:按照数据类型:基本数据类型、引用数据类型方式2:按照类中声明的位…

第十四届省赛大学B组(C/C++)子串简写

原题链接:子串简写 程序猿圈子里正在流行一种很新的简写方法: 对于一个字符串,只保留首尾字符,将首尾字符之间的所有字符用这部分的长度代替。 例如 internationalization 简写成 i18n,Kubernetes 简写成 K8s&#…

Java基础知识总结(37)

JUC容器 JUC基于非阻塞算法(Lock Free 无锁编程)提供了一组高并发的List、Set、Queue、Map容器。 JUC高并发容器是基于非阻塞算法实现的容器类,无锁编程算法主要通过CAS(Compare And Swap)volatile的组合实现&#x…

【SaaS,PaaS? XaaS -微参考】

介绍 以下是关于各种云服务模式的简要介绍,包括全称、定义、典型场景和应用: 缩写全称定义关键词典型场景和应用SaaSSoftware as a Service将软件以服务的形式交付给用户,用户通过互联网访问软件。提供软件电子邮件、在线办公套件&#xff…

JavaAPI操作HBase-Day2

Java代码操作HBase pom依赖,依赖版本要和软件一致 <dependencies><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.5.5</version></dependency><dependency>…

android 14 apexd分析(1)apexd bootstrap

Apex的由来&#xff0c;我们都知道普通的apk我们可以通过应用商店playstore等进行更新&#xff0c;apex的引入是google希望也能通过playstore更新bin文件.so etc配置文件等类型文件. 这些文件的安装实际通过apexd来进行&#xff0c;现在我们来解析一下apexd&#xff0c; apexd的…

JAVAEE——文件IO之文件操作

文章目录 文件的创建和销毁File概述构造方法常用的方法getAbsolutePath()exists()isDirectory()isFile()createNewFile()delete()deleteOnExit()list()listFiles()mkdir() 文件的创建和销毁 上面我们介绍了文件的读写操作那么文件的创建等的操作如何进行呢&#xff1f;这个操作…

.NET 设计模式—简单工厂(Simple Factory Pattern)

简介 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;属于类的创建型模式&#xff0c;又叫静态工厂方法模式&#xff08;Static FactoryMethod Pattern&#xff09;,是通过一个工厂类来创建对象&#xff0c;根据不同的参数或条件返回相应的对象实例。这种模式隐藏…

前视声呐目标识别定位(四)-代码解析之启动识别模块

前视声呐目标识别定位&#xff08;一&#xff09;-基础知识 前视声呐目标识别定位&#xff08;二&#xff09;-目标识别定位模块 前视声呐目标识别定位&#xff08;三&#xff09;-部署至机器人 前视声呐目标识别定位&#xff08;四&#xff09;-代码解析之启动识别模块 …

C语言之分支语句和循环语句

前言 一、什么是语句&#xff1f; 二、分支语句&#xff08;选择结构&#xff09; 2.1 if语句 2.2 switch语句 三、循环语句 3.1 while循环 3.2 break与continue语句 3.3 getchar()与putchar() 3.3.1 缓冲区 3.4 for循环 3.4.1 一些for循环的变种 3.5 do...while循…

AcWing 785. 快速排序——算法基础课题解

AcWing 785. 快速排序 文章目录 题目描述CGo模板 题目描述 给定你一个长度为 n 的整数数列。 请你使用快速排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行&#xff0c;第一行包含整数 n。 第二行包含 n 个整数&#xff08;所有…

C语言中的结构体:高级特性与扩展应用

前言 结构体在C语言中的应用不仅限于基本的定义和使用&#xff0c;还包含一些高级特性和扩展应用&#xff0c;这些特性和应用使得结构体在编程中发挥着更加重要的作用。 一、位字段&#xff08;Bit-fields&#xff09; 在结构体中&#xff0c;我们可以使用位字段来定义成员…

AJAX —— 学习(二)

目录 一、利用 JSON 字符串 返回数据 &#xff08;一&#xff09;基础代码 &#xff08;二&#xff09;原理及实现 二、nodmon 工具 自动重启服务 &#xff08;一&#xff09;用途 &#xff08;二&#xff09;下载 &#xff08;三&#xff09;使用 三、IE 缓存问题 &a…

QA测试开发工程师面试题满分问答8: mysql数据库的索引定义、用途和使用场景

MySQL数据库索引是一种数据结构&#xff0c;用于提高数据库的查询效率。索引是基于表中的一个或多个列构建的&#xff0c;它们允许数据库系统快速定位和访问表中的特定数据&#xff0c;而无需扫描整个表。 索引的定义 在MySQL中&#xff0c;可以使用CREATE INDEX语句定义索引…

pulsar集群部署流程及方案

# 部署方案: 集群模式部署,broker和bookie混合部署,zk同时部署在三台机器上面(资源充足zk最好单独部署,注意pulsar和zk版本兼容性) # 1.集群资源使用(实际测试情况CPU使用率比内存高,建议CPU设置大于内存,不同业务场景有差异) 三台主机centos7 16核16GB,每台挂载1TB机械硬盘(不…