这是京东网银在线面试的时候问到的,之前一点没准备过关于设计的东西,所以当场让设计简单的正方形长方形就有点虚,说的几个方案貌似面试官都不是很满意,回来查了一下博客,发现这个问题的讨论还蛮多的,尤其是关于能不能用继承来设计,貌似还专门有人有了篇论文。

先说一下大部分人比较认可的一个方案吧,设计一个接口,求面积和周长两个方法,然后长方形和正方形各自实现这个接口。代码如下:

public interface Shape {

public double area();

public double perimeter();

}

public class Rectangle implements Shape {

private double width;

private double height;

public Rectangle(double width,double height){

this.width=width;

this.height=height;

}

@Override

public double area() {

return this.width*this.height;

}

@Override

public double perimeter() {

return 2*(this.width+this.height);

}

}

public class Square implements Shape {

private double side;

public Square(double side){

this.side=side;

}

@Override

public double area() {

return side*side;

}

@Override

public double perimeter() {

return 4*side;

}

}    这个比较容易懂吧,也没啥问题,不过这种方案把长方形正方形的类划分在相平行的等级里了,总觉得有点不太合适。

当时面试的时候设计长方形就是上面代码这样,但是一根筋地想让正方形去继承长方形(因为正方形是长方形的特例嘛),不过正方形这个类怎么设计一直没设计出来(因为边长不知道怎么搞定)。回来又看了一下head first和 thinking,两本书里都明确说了,大部分继承关系都可以用is-a来表示,正方形 is a 长方形,所以应该可以用继承来设计正方形。后来想到可以在构造函数中使用super函数,这样一来正方形的类中就不用再写任何方法了。代码如下(接口和长方形的类如上所示,不做任何改变):

public class Square extends Rectangle{

private double side;

public Square(double side){

super(side,side);

this.side=side;

}

public static void main(String[] args) {

Square s=new Square(2.5);

System.out.println(s.perimeter());

System.out.println(s.area());

}

}

表示突然面试的时候让设计OO的类还是很难想到构造函数用super的吧,因为自己平时就没这么设计过。

还想在这边说一下的是,虽然平时看别人的OO的一个框架感觉很自然,或者读者在看上面代码的时候感觉没啥难的,平时也一口一个面向对象,不过平心而论,在什么都没有的情况下让自己设计几个类还是有点难度的,可能因为平时在学校写代码也不会涉及到多少设计方面的东西,所以以后有机会还需要在实际项目里多锻炼自己的思维吧。

java 长方形正方形_面向对象的疑惑,java设计正方形,长方形相关推荐

  1. Java编程题_面向对象和常用API01_B级

    Java编程题_面向对象和常用API01_B级 第1题 面向对象.异常.集合.IO 题干: 请编写程序,完成键盘录入学生信息,并计算总分将学生信息与总分一同写入文本文件 需求:键盘录入3个学生信息(姓 ...

  2. java 判断类型_如何快速入门Java编程学习(干货)

    一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...

  3. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  4. 做Java头发少_这35个Java代码优化细节,你用了吗

    链接:https://www.jianshu.com/p/6e472304b5ac 前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有 ...

  5. 支持java虚拟主机_为何缺乏支持Java的虚拟主机

    现在很多站长们,都青睐于香港虚拟主机建站.现在常见的是asp和PHP的程序空间很多,但是Java的少之又少,下面小编我给大家聊一聊! 一.香港Java虚拟主机成本高 使用Java程序建站,就必须要用支 ...

  6. java future用法_纯干货:Java学习过程中的21个知识点和技术点

    我们在Java学习过程中要学会抓重点,善于总结,Java学习过程中常见的21个知识点和技术点你知道吗?下面和千锋广州小编一起来看看吧! 1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识 ...

  7. 学java 的要点_零基础学Java,掌握Java的基础要点

    对于程序员群体来说,了解一定的技巧会对学习专业技能更有帮助,也更有助于在自己的职业发展中处于有利地位,无限互联Java培训专家今天就为大家总结Java程序员入门时需要掌握的基础要点: 掌握静态方法和属 ...

  8. java integer最大值_五分钟学会java中的基础类型封装类

    在刚刚学习java的时候,老师不止一次的说过java是一种面向对象的语言,万物皆对象.对于java中的基础数据类型,由于为了符合java中面向对象的特点,同样也有其封装类.这篇文章对其有一个认识. 一 ...

  9. java视频马_【B0718】[java视频教程]某马2019年Java进阶课日志框架视频教程 it教程...

    Java视频教程名称:某马2019年Java进阶课日志框架视频教程      java自学网[javazx.com]  日志框架视频教程   it教程 Java自学网收集整理 java论坛' k&am ...

  10. 孙鑫java基础视频教程_孙鑫老师JAVA无难事视频教程 最适合java入门学习打基础的课程 附源码讲义 12课...

    课程介绍 由孙鑫老师亲自授课录制.内容涵盖面广,从入门到精通,授课通俗易懂,分析问题独到精辟,学员通过本套光盘的学习,能够快速掌握Java编程语言,成为Java高手. 由孙鑫老师亲自授课录制.内容涵盖 ...

最新文章

  1. 使用RabbitMQ做数据接收和处理时,自动关闭
  2. 吴恩达新书《Machine Learning Yearning》完整中文版 PDF 下载!
  3. 5GS 协议栈 — PFCP 协议 — QER QoS 实施规则
  4. ABB机器人的 备份与恢复
  5. button点击后变色_汽车改色膜新潮流,2021年流行渐变色
  6. (108)FPGA面试题-介绍STA静态时序分析及其作用
  7. (必读)工业机器人基础教程——快速入门学习
  8. SpringBoot实现MySQL读写分离
  9. bwa manul page
  10. 手机:运行内存,机身内存,内存卡的区分
  11. ML之ME:Best-KS分箱/KS值(分类预测问题中评价指标、数据分箱方法)的简介(KS与ROC的关系)、使用方法、案例应用之详细攻略
  12. 一个登录页面的测试用例(借鉴他人的,方便查阅)
  13. CentOS7 NVIDIA显卡驱动安装教程(亲测有效)
  14. windows下tomcat设置开机自启
  15. 条码打印软件之如何在条码内容插入字符而不被扫描
  16. 腾讯Android原生UI框架---QMUI
  17. 智能医疗诊断系统设计
  18. 基于FPGA,快速读取数据,快速压缩数据输出JPEG,可改接口
  19. 平面设计师版式设计细节哪些要重视?
  20. 祝贺 :首批舌尖特搜今日正式签约

热门文章

  1. java 单点_java实现单点登录的两种方式
  2. PS剪切图的基本操作
  3. 滤波笔记四:扩展卡尔曼滤波
  4. WebView 截取长图
  5. libcef和js交互
  6. SaaS公司投资分析时,MRR比ARR指标更有用 | 投资人说
  7. python 合并word并生成目录_使用Python制作WORD报告
  8. 微信小程序 audio 音频 组件
  9. 2021阿里巴巴实习生面试经验
  10. 关于plsqldeveloper打开报错解决方法MSVCR71.dll is missing from your compute