JavaSEDemo07 刺骨的言语ヽ痛彻心扉 2021-09-25 06:18 180阅读 0赞 ### 文章目录 ### * 简介 * 练习题:(多态)写一个函数,接收一个图形作为参数,打印出该图形的周长和面积 * * 题目分析 * 代码示例 * * Shape类 * Triangle类 * Circle类 * Square类 * Rectangle类 * ShapeTest类 * 程序运行结果 * 关联与依赖 * * 关联 * * 一对一 * 一对多 * 聚合 * 组合 * 依赖 * 几种关系的强弱比较 * JDK常用包 * Object类的主要方法 * * equals方法 * hashCode * toString # 简介 # * 本文是2021/03/29整理的笔记 * 赘述可能有点多,还请各位朋友耐心阅读 * 本人的内容和答案不一定是最好最正确的,欢迎各位朋友评论区指正改进。 # 练习题:(多态)写一个函数,接收一个图形作为参数,打印出该图形的周长和面积 # * (1)父类图形Shape类 * (2)子类三角形Triangel类 * (3)子类圆形Circle类 * (4)子类正方形Square类 * (5)子类矩形Rectangle类 * (6)分别求各图形的周长和面积 ## 题目分析 ## * 本题中Shape类只需要写两个方法即可,计算周长和计算面积的方法 * 三角形需要设置三条边。三角形比较特殊,需满足两边之和大于第三边。这个条件可以在构造方法和Set方法中设置,也可以单独写一个方法出来。本题的代码示例将2种情况一并写在了三角形类中。 * 圆形需要设置半径,构造方法以及相应的Getter and Setter方法 * 正方形设置边长,构造方法以及相应的Getter and Setter方法 * 矩形设置长和宽,构造方法以及相应的Getter and Setter方法 * 设置一个ShapeTest类,用于直接调用所有图形的计算面积和计算周长方法 ## 代码示例 ## ### Shape类 ### //Shape类 public class Shape { //计算周长的方法 public void calculateCircumference(){ } //计算面积的方法 public void calculateArea(){ } } ### Triangle类 ### public class Triangle extends Shape{ //三角形的三条边长 private double a; private double b; private double c; //计算周长的方法 @Override public void calculateCircumference() { System.out.println("三角形的周长是:"+(a+b+c)); } //判断周长的方法 public void judgeCircumference() { if (a + b > c && a + c > b && b + c > a && a > 0 && b > 0 && c > 0) { //满足条件就调用计算周长的方法 calculateCircumference(); } else { System.out.println("三角形的周长返回错误。错误:不满足三边关系或者至少一条边设置了负数"); } } //计算面积的方法 @Override public void calculateArea() { //使用海伦公式计算面积 double p = (a+b+c)/2; double area = Math.sqrt((p-a)*(p-b)*(p-c)*p); System.out.println("三角形的面积是:"+area); } //判断面积的方法 public void judgeArea(){ if (a + b > c && a + c > b && b + c > a && a > 0 && b > 0 && c > 0) { //满足条件就调用计算面积的方法 calculateArea(); } else { System.out.println("三角形的面积返回错误。错误:不满足三边关系或者至少一条边设置了负数"); } } //无参构造方法 public Triangle() { } //有参构造方法 public Triangle(double a, double b, double c) { if(a+b>c && a+c>b && b+c>a && a>0 && b>0 && c>0) { this.a = a; this.b = b; this.c = c; }else{ System.out.println("三角形的三条边设置错误。错误:不满足三边关系或者至少一条边设置了负数"); } } //三条边a b c 的Getter and Setter public double getA() { return a; } public void setA(double a) { if(a+b>c && a+c>b && b+c>a) { this.a = a; }else{ System.out.println("三角形的三条边设置错误。错误:不满足三边关系或者至少一条边设置了负数"); } } public double getB() { return b; } public void setB(double b) { if(a+b>c && a+c>b && b+c>a) { this.b = b; }else{ System.out.println("三角形的三条边设置错误。错误:不满足三边关系或者至少一条边设置了负数"); } } public double getC() { return c; } public void setC(double c) { if(a+b>c && a+c>b && b+c>a) { this.c = c; }else{ System.out.println("三角形的三条边设置错误。错误:不满足三边关系或者至少一条边设置了负数"); } } } ### Circle类 ### public class Circle extends Shape{ //圆的半径 private double radius; //计算面积方法重写 @Override public void calculateArea() { //使结果保留两位小数 System.out.println("圆的面积是:"+String.format("%.2f",Math.PI * radius * radius));; } //计算周长方法重写 @Override public void calculateCircumference() { //结果保留两位小数 System.out.println("圆的周长是:"+String.format("%.2f",Math.PI * radius * 2)); } //无参构造方法 public Circle() { } //有参构造方法 public Circle(double radius) { if(radius>0) { this.radius = radius; }else { System.out.println("设置的半径错误"); } } //半径radius的Getter and Setter方法 public double getRadius() { return radius; } public void setRadius(double radius) { if(radius >0){ this.radius = radius; }else { System.out.println("设置的半径错误"); } } } ### Square类 ### public class Square extends Shape { //正方形的边长 private double side; //计算面积方法重写 @Override public void calculateArea() { System.out.println("正方形的面积是:"+side*side); } //计算周长方法重写 @Override public void calculateCircumference() { System.out.println("正方形的周长是:"+side*4); } //无参构造方法 public Square() { } //有参构造方法 public Square(double side) { this.side = side; } //边长side的Getter and Setter方法 public double getSide() { return side; } public void setSide(double side) { if(side>0){ this.side = side;} else { System.out.println("设置的正方形边长错误"); } } } ### Rectangle类 ### public class Rectangle extends Shape { //矩形的长、宽 private double length; private double width; //计算面积方法重写 @Override public void calculateArea() { System.out.println("长方形面积:"+length * width); } //计算周长方法重写 @Override public void calculateCircumference() { System.out.println("长方形周长:"+(length+width)); } //无参构造方法 public Rectangle() { } //有参构造方法 public Rectangle(double length, double width) { if(length>0 && width >0) { this.length = length; this.width = width; }else { System.out.println("设置的长和宽错误"); } } //长length宽width的Getter and Setter方法 public double getLength() { return length; } public void setLength(double length) { if(length>0){ this.length = length; }else { System.out.println("设置的长错误"); } } public double getWidth() { return width; } public void setWidth(double width) { if(width>0) { this.width = width; }else { System.out.println("设置的宽错误"); } } } ### ShapeTest类 ### public class ShapeTest { //计算周长的方法,向上转型为Shape类 public static void calculateCircumference(Shape shape){ //如果图形是三角形类,则向下转型 if(shape instanceof Triangle){ Triangle triangle = (Triangle) shape; //调用判断周长的方法 triangle.judgeCircumference(); return; }else { shape.calculateCircumference(); } } //计算面积的方法,向上转型为Shape类 public static void calculateArea(Shape shape){ //如果图形是三角形类,则向下转型 if(shape instanceof Triangle){ Triangle triangle = (Triangle) shape; //调用判断面积的方法 triangle.judgeArea(); return; }else { shape.calculateArea(); } } //main方法 public static void main(String[] args) { //Triangle类 Shape triangle = new Triangle(3.0,4.0,5.0); calculateCircumference(triangle); calculateArea(triangle); //Circle类 Shape circle = new Circle(5.0); calculateCircumference(circle); calculateArea(circle); //Square类 Shape square = new Square(5.0); calculateCircumference(square); calculateArea(square); //Rectangle类 Shape rectangle = new Rectangle(5.0,4.0); calculateCircumference(rectangle); calculateArea(rectangle); } } ### 程序运行结果 ### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h5cGVydGV4dDEyMw_size_16_color_FFFFFF_t_70_pic_center] # 关联与依赖 # ## 关联 ## * 类间是has - a 的关系,一个类的对象作为另一个类的属性,生命周期没有必要联系。 ### 一对一 ### * 比如说人与身份证的关系,一个人只能持有一张合法的身份证,一张身份证只对应一个人。 代码示例: //身份证的类 public class IdCard{ //身份证的id String id; //身份证号码 String number; } //人的类 public class Person(){ String name; String id; int age; //身份证 IdCard idcard; } ### 一对多 ### * 比如说一间教室对应多个学生,教室中有一个数组或集合存储学生 * 代码示例: //学生类 public class Student{ String name; int age; //性别 String gender; } //教室类 public class ClassRoom{ Student[] students; } ## 聚合 ## * 类间是has - a的关系 ,在语法上和关联没有区别,只能从语义上区分。生命周期没有必要联系。 * 例如:一个学校有很多学生 * 代码示例: public class Student{ } public class School{ private Student[ ] students; } ## 组合 ## * 类与类间是contains - a 关系,生命周期有必要联系。部分必须后于整体创建或同时创建,部分必须先于整体销毁或同时销毁。 * 比如说一个游戏和一个游戏的菜单,菜单必须在游戏开启时或游戏开启后才能打开,菜单必须在游戏关闭时或游戏关闭前关闭。 * 聚合和组合的区别: * 聚合的生命周期没有必要联系,组合的生命周期有必要联系。 ## 依赖 ## * 类与类间是use - a的关系,将一个类的对象作为另一个类中的方法参数使用。生命周期没有必要联系 * 代码示例: //鼠标类 public class Mouse(){ } //人的类 public class Person(){ public void useMouse(Mouse mouse){ System.out.println("人正在使用"+mouse); } } ## 几种关系的强弱比较 ## * 依赖<关联<聚合<组合 # JDK常用包 # * java.lang Java语言核心类库 * java.util包 工具类 * java.net 网络编程 * java.sql 数据库 * java.text 格式化 * java.io 输入输出 # Object类的主要方法 # ## equals方法 ## * public boolean equals(Object obj) * 对象比较:比较两个对象的虚地址是否相同 * 如果想要满足其他需要可以重写此方法 ## hashCode ## * public int hashCode() * 取得Hash码 ## toString ## * public String toString() * 对象打印时调用 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h5cGVydGV4dDEyMw_size_16_color_FFFFFF_t_70_pic_center]: /images/20210923/0c30a96d645644c19f7a046a2657cae5.png
相关 JavaSEDemo29IO流 文章目录 简介 练习题 练习1 练习2 练习3 创建文件夹 输入流和输出流 字节流和字符流 r囧r小猫/ 2021年09月25日 08:04/ 0 赞/ 242 阅读
相关 JavaSEDemo23集合 文章目录 简介 树 树删除元素 树的先序 中序 后续遍历 集合 Collection接口 List接口 秒速五厘米/ 2021年09月25日 07:46/ 0 赞/ 204 阅读
相关 JavaSEDemo09 文章目录 简介 练习题目:统计字符串中不同字符的个数 代码示例 程序运行结果 final关键字 final关键字修 谁践踏了优雅/ 2021年09月25日 06:22/ 0 赞/ 225 阅读
相关 JavaSEDemo08 文章目录 简介 Object类的几个方法的使用或重写 equals hashCode finalize 抽象类 野性酷女/ 2021年09月25日 06:22/ 0 赞/ 212 阅读
相关 JavaSEDemo07 文章目录 简介 练习题:(多态)写一个函数,接收一个图形作为参数,打印出该图形的周长和面积 题目分析 代码示例 刺骨的言语ヽ痛彻心扉/ 2021年09月25日 06:18/ 0 赞/ 181 阅读
相关 JavaSEDemo06 文章目录 简介 显示继承与隐式继承 继承的重点 继承与构造方法 继承的优点和缺点 final关键字 多重继承时构造方法的执行情况 清疚/ 2021年09月25日 06:02/ 0 赞/ 213 阅读
相关 JavaSEDemo05 文章目录 简介 void方法中return语句的使用规范 可变API与不可变API 数据交换与方法传参 为什么不能用返回值类型来判断方法是否 比眉伴天荒/ 2021年09月25日 05:58/ 0 赞/ 246 阅读
还没有评论,来说两句吧...