Java-黑马Java学习作业-day15面向对象进阶(抽象类接口内部类)

news2024/12/25 2:11:41

学习视频链接:https://www.bilibili.com/video/BV17F411T7Ao

文章目录

    • 第一题:(抽象类求面积和周长)
    • 第二题:(接口实现新旧手机功能)
    • 第三题:(使用子类和匿名内部类调用接口)


第一题:(抽象类求面积和周长)

需求:

分析以下需求用代码实现:

  1. 定义形状类:

    功能:求面积,求周长

  2. 定义圆形类Round:

    属性:半径,圆周率

    功能:求面积,求周长

  3. 定义长方形类Rectangle:

    属性:长和宽

    功能:求面积,求周长

  4. 定义测试类:

    分别创建圆形和长方形对象,为相应的属性赋值

    分别调用求面积和求周长的方法

  • Graph接口
package cn.kox.homework01;

/**
 * @ClassName: Graph
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public abstract class Graph {

    // 面积
    public abstract void area();

    // 周长
    public abstract void perimeter();
}

  • Rectangle类
package cn.kox.homework01;

/**
 * @ClassName: Rectangle
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class Rectangle extends Graph{

    private double length;
    private double wide;

    public Rectangle() {
    }

    public Rectangle(double length, double wide) {
        this.length = length;
        this.wide = wide;
    }

    public double getLength() {
        return length;
    }

    public void setLength(double length) {
        this.length = length;
    }

    public double getWide() {
        return wide;
    }

    public void setWide(double wide) {
        this.wide = wide;
    }

    @Override
    public void area() {
        double result = length * wide;
        System.out.println("长方形的面积为:" + result);
    }

    @Override
    public void perimeter() {
        double result = (length + wide) * 2;
        System.out.println("长方形的周长为:" + result);
    }
}
  • Round类
package cn.kox.homework01;

/**
 * @ClassName: Round
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class Round extends Graph{
    private double radius;
    private double PI;

    public Round() {
    }

    public Round(double radius, double PI) {
        this.radius = radius;
        this.PI = PI;
    }

    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }

    public double getPI() {
        return PI;
    }

    public void setPI(double PI) {
        this.PI = PI;
    }

    @Override
    public void area() {
        double result = radius * PI;
        System.out.println("圆面积为:" + result);
    }

    @Override
    public void perimeter() {
        double result = 2 * PI * radius;
        System.out.println("圆周长为:" + result);
    }
}
  • Test测试类
package cn.kox.homework01;

/**
 * @ClassName: Test
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class Test {
    public static void main(String[] args) {
        Round r = new Round(2, 3.14);
        r.area();
        r.perimeter();

        Rectangle r1 = new Rectangle(10, 5);
        r1.area();
        r1.perimeter();
    }
}

运行结果:
在这里插入图片描述

第二题:(接口实现新旧手机功能)

需求:

  1. 定义手机类

​ 行为:打电话,发短信

  1. 定义接口IPlay

​ 行为:玩游戏

  1. 定义旧手机类继承手机类

​ 行为:继承父类的行为

  1. 定义新手机继承手机类实现IPlay接口

    行为:继承父类的行为,重写玩游戏方法

  2. 定义测试类

​ 在测试类中定义一个 用手机的方法,要求该方法既能接收老手机对象,也能接收新手机对象

​ 在该方法内部调用打电话,发短信以及新手机特有的玩游戏方法

  • formerPhone类
package cn.kox.homework02;

/**
 * @ClassName: formerPhone
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class formerPhone extends Phone{

    public void show() {
        System.out.println("老手机");
    }
}
  • IPlay接口
package cn.kox.homework02;

public interface IPlay {
    void playGame();
}
  • newPhone类
package cn.kox.homework02;

/**
 * @ClassName: newPhone
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class newPhone extends Phone implements IPlay{

    @Override
    public void playGame() {
        System.out.println("玩游戏");
    }

    public void show() {
        System.out.println("新手机");
    }
}
  • Phone类
package cn.kox.homework02;

/**
 * @ClassName: Phone
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class Phone {
    public void send() {
        System.out.println("发短信");
    }

    public void phoning() {
        System.out.println("打电话");
    }
}
  • Test测试类
package cn.kox.homework02;

/**
 * @ClassName: Test
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class Test {
    public static void main(String[] args) {
        formerPhone f = new formerPhone();
        f.show();
        f.phoning();
        f.send();

        System.out.println();

        newPhone n = new newPhone();
        n.show();
        n.phoning();
        n.send();
    }
}

运行结果
在这里插入图片描述

第三题:(使用子类和匿名内部类调用接口)

需求:

  1. 接口IPlay中有一个方法playGame(),在测试类中如何调用该方法?

​ 要求1.创建子类实现接口的方式实现
​ 要求2:用匿名内部类实现

  1. 一个抽象类Fun中有一个抽象方法 fun() , 在测试类中如何调用该方法?

​ 要求1.创建子类继承抽象类的方式实现
​ 要求2:用匿名内部类实现

  • Fun接口
package cn.kox.homework03;

public interface Fun {
    public abstract void fun();
}
  • funSon类
package cn.kox.homework03;

/**
 * @ClassName: funSon
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class funSon implements Fun{
    @Override
    public void fun() {
        System.out.println("开个玩笑吧");
    }
}
  • IPlay接口
package cn.kox.homework03;

public interface IPlay {
    void playGame();
}
  • Test测试类
package cn.kox.homework03;

/**
 * @ClassName: Test
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class Test {
    public static void main(String[] args) {
        IPlay i =  new IPlay() {

            @Override
            public void playGame() {
                System.out.println("打游戏");
            }
        };
        i.playGame();

        funSon f = new funSon();
        f.fun();
    }
}

运行结果:
在这里插入图片描述

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

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

相关文章

大厂高薪测试在线讲解Jmeter全套性能测试

Jmeter进行性能测试基本包含如下基本过程:1)新增线程组创建测试线程组,并设置线程数量及线程初始化启动方式。2)新增 JMeter 元组创建各种默认元组及测试元组,填入目标测试静态资源请求和动态资源请求参数及数据。3&am…

Task9:Excel数据透视表

文章目录一 Excel数据透视表1 数据透视表2 切片器3 数据透视的注意事项4 透视表常用法二 Excel数据透视图一 Excel数据透视表 1 数据透视表 什么是透视表:把明细表分类汇总的过程,可以按照不同的组合方式进行数据计算使用场景: 1.大量数据&…

QT入门Buttons之QCheckBox

目录 一、界面布局介绍 1、布局器中的位置及使用 2、常用属性 二、属性功能介绍 1、常用信号 2、测试信号stateChanged(int) 3、组合框效果 三、Demo展示 此文为作者原创,转载标明出处! 一、界面布局介绍 1、布局器中的位置及使用 QCheckBox复选…

除了console.log,你还用过console其它的属性么?

目录前言console.infoconsole.debugconsole.errorconsole.warnconsole.time 和 console.timeEndconsole.group 和 console.groupEndconsole.table前言 刚学习前端的时候,vue还没用vue-devtools,react还没用 React Developer Tools,我们经常通…

fastjson 1.2.47 RCE漏洞保姆级复现

1.漏洞概述 Fastjson提供了autotype功能,允许用户在反序列化数据中通过“type”指定反序列化的类型,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时&…

Sklearn中的算法效果评估手段

我们曾在《算法效果评估:均方根误差(RMSE)/ 标准误差》一文中介绍过评估算法效果使用的主要方法:均方根误差(RMSE),但在实际应用中,评估算法效果还有更多内容,本文我们以…

VsCode安装及修改插件存储位置

【官网】: https://code.visualstudio.com/ 【修改插件仓库】: 创建名为VSCODE_EXTENSIONS的环境变量,内容指向自定义的文件夹即可(位置无需限制)。 【需要安装的插件】:

SBOM的介绍与syft和grype的使用

文章目录SBOM介绍工具syftgrypeSBOM介绍 SBOM(软件物料清单)是给定产品的中所有软件组件(专有和开源代码)、开源许可证和依赖项的清单。它提供了对软件供应链以及可能存在的任何许可证合规性、安全性和质量风险的可见性。 SBOM可…

Hystrix如何达到高可用

小型电商网站的页面展示采用页面全量静态化的思想。数据库中存放了所有的商品信息,页面静态化系统,将数据填充进静态模板中,形成静态化页面,推入Nginx服务器。用户浏览网站页面时,取用一个已经静态化好的html页面,直接返回回去,不涉及任何的业务逻辑处理。 用户每次浏览…

python输出不重复的字符

项目场景: 输入一个字符串,把最左边的10个不重复的字符(大小写算不同字符)挑选出来。 如不重复的字符不到10个,则按实际数目输出。问题描述 输出一个字符串,包含字符串s最左边10个不重复的字符。不到10个…

Canal与Kafka数据传输协议protocol buffer

1.写在前面 实时数仓开发中,利用Canal伪装slave获取MySQL的增量数据,获取后的数据由Kafka生产者接收,交由Flink实时流计算。传输数据量较大时,会占用内存及带宽,所以考虑将数据序列化和反序列化操作,这里介…

KNN(K-近邻)算法

1、概述 KNN(K−NearestNeighbor)KNN \left( K-Nearest Neighbor \right)KNN(K−NearestNeighbor)是机器学习中最基础的算法之一。既可以用于分类也可以用于回归,KNNKNNKNN通过测量不同特征值之间的距离来进行分类。 2、实例理解 如果k3k 3k3,绿色圆点…

【Cocos新手入门】使用 cocos creator 创建单行文本输入框及多行文本输入框

本篇文章主要讲解使用 cocos creator 创建单行文本输入框及多行文本输入框,并绑定文本框获取文本输入数据的方法。 作者:任聪聪 日期:2023年2月2日 cocos引擎版本2.4.3 实际效果 单行文本效果、多行文本效果 说明:如果不清楚按钮…

jquery:表单请求、序列化+案例

表单请求提交原则name相同的表单提交,name出现多次,对应不同表单的值没有name,含有disabled(禁用)禁止提交多选单选下拉列表需要设置value属性才能取值表单提交事件名称写法描述提交方式method“get”get不安全取数据&…

30. 面向对象高级编程

1. __solts__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。 from types import MethodTypeclass Student:def __init__(self):passdef set_num(sel…

OSCP_VULHUB_Matrix3

文章目录简介扫描ida汇编ssh登录/提权简介 下载地址: https://download.vulnhub.com/matrix/Machine_Matrix_v3.ova 环境: VMware 16虚拟机软件 Matrix3靶机IP地址:192.168.132.145 Kali的IP地址:192.168.132.139 Matrix3靶机与…

Shiro基础知识与集成应用

1、Shiro可以完成: 【认证、授权、加密、会话管理】、与Web集成、缓存等2、特点: 易于使用、全面、灵活、强力支持Web、兼容性强、社区支持 外部观看内部观看3、 登录认证:1)身份验证:一般需要提供如身份ID等一些标识信息来表明登录者的身份,如提供email…

Druid(德鲁伊)数据库连接池

文章目录一.数据库连接池的必要性(一).传统数据库连接模式的的步骤(二).传统数据库连接模式存在的问题二.数据库连接池技术(一).数据连接池的思想:(二).数据库连接池的任务:(三).数据库连接池的规模:(四).工作原理:(五).数据库连接…

5 -【Faster R-CNN】之 AnchorGenerator 代码精读

【Faster R-CNN】之 AnchorGenerator 代码精读1、anchor 的 size 和 aspect_ratios2、计算以中心坐标为 (0, 0) 的 anchor3、将 anchor 映射到原图上4、代码汇总anchor 的作用:anchor 是用来做辅助计算的,用于和 (上节课说的,由RP…

共享模型之内存(一)

1.Java内存模型 1>.JMM即Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等; 2>.JMM体现在以下几个方面: ①.原子性 - 保证指令不会受到线程上下文切换的影响; ②.可见性 - 保证指令不会受cpu缓存的影响; ③.有序…