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

news/2025/1/13 2:46:57/

学习视频链接: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;}@Overridepublic void area() {double result = length * wide;System.out.println("长方形的面积为:" + result);}@Overridepublic 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;}@Overridepublic void area() {double result = radius * PI;System.out.println("圆面积为:" + result);}@Overridepublic 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{@Overridepublic 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{@Overridepublic 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() {@Overridepublic void playGame() {System.out.println("打游戏");}};i.playGame();funSon f = new funSon();f.fun();}
}

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


http://www.ppmy.cn/news/21525.html

相关文章

【Linux】多线程详解(中)

🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…

1-2MySQL 面试题

MySQL 面试题 1.说一下 MySQL 执行一条查询语句的内部执行过程? 答:MySQL 执行一条查询的流程如下: 客户端先通过连接器连接到 MySQL 服务器;连接器权限验证通过之后,先查询是否有查询缓存,如果有缓存&a…

RBAC简介

RBAC BAC基于角色的访问控制,RBAC认为权限授权的过程可以抽象地概括为:Who是否可以对What进行How的访问操作 RBAC简介 基于角色的权限访问控制模型 在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。RB…

垃圾分类模型训练部署教程,基于MaixHub和MaixPy-k210

时间:2023-2-1 本文是图文演示内容,将给大家介绍 ,在MaixHub上训练模型,然后部署到Maix duino开发板上的流程。我这里用于演示的是垃圾分类任务,大家也可以按照该流程训练自己想要的模型。 通过MaixHub的迁移学习&…

【web高级进阶之JS】css、js规范+新增数据类型+堆栈溢出+GC垃圾回收

【web高级进阶之JS】css、js规范+新增数据类型+堆栈溢出+GC垃圾回收 css、js规范一、js 规范1、文件、资源命名2、文本缩进3、注释4、文件引用加载5、html引号6、严格模式7、变量声明8、提升声明9、变量判断10、字符串定义11、if的判断二、css书写规范1、css选择器2、使用css缩…

力扣24. 两两交换链表中的节点

两两交换链表中的节点题目 思路 首先给原单链表加上一个无意义的头结点,可以统一单链表为空时的处理。 两两结点进行交换,用头结点做辅助,即三个结点看做一组。 处理过程是三个步骤,首先将cur指针指向head。 初始状态为&#xf…

网络设备和常见网络拓扑

目录 集线器 网桥 交换机 路由器 常见网络拓扑 总线型 环形 星型 树型 网状 集线器 集线器的英文称为“Hub”。“Hub”是“中心”的意思,它的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在…

数字示波器如何显示和测量正弦信号?

示波器顾名思义,即是显示电压波形的电子仪器。它可以将电压随着时间变化的规律通过图形显示出来。频率为50Hz,有效值为220V的交流电的波形,但是要想用示波器将波形显示在示波器的屏幕上,关键的问题是需将“t”这个时间信号转变成人…