面向对象的疑惑,java设计正方形,长方形
来源:互联网 发布:老式电视网络机顶盒 编辑:程序博客网 时间:2024/05/16 00:27
这是京东网银在线面试的时候问到的,之前一点没准备过关于设计的东西,所以当场让设计简单的正方形长方形就有点虚,说的几个方案貌似面试官都不是很满意,回来查了一下博客,发现这个问题的讨论还蛮多的,尤其是关于能不能用继承来设计,貌似还专门有人有了篇论文。
先说一下大部分人比较认可的一个方案吧,设计一个接口,求面积和周长两个方法,然后长方形和正方形各自实现这个接口。代码如下:
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;}@Overridepublic double area() {return this.width*this.height;}@Overridepublic double perimeter() {return 2*(this.width+this.height);}}
public class Square implements Shape {private double side;public Square(double side){this.side=side;}@Overridepublic double area() {return side*side;}@Overridepublic 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的一个框架感觉很自然,或者读者在看上面代码的时候感觉没啥难的,平时也一口一个面向对象,不过平心而论,在什么都没有的情况下让自己设计几个类还是有点难度的,可能因为平时在学校写代码也不会涉及到多少设计方面的东西,所以以后有机会还需要在实际项目里多锻炼自己的思维吧。
0 0
- 面向对象的疑惑,java设计正方形,长方形
- 面向对象方法的困境--正方形不能继承自长方形?
- 【学习点滴-面向对象】面向对象的困境--正方形不能继承长方形?
- java例题学习:面向对象之长方形例题学习
- 把长方形的图片截取成正方形
- 计算圆,正方形和长方形的面积
- java 求正方形的面积,长方形的面积和立方体的表面积
- Java面向对象设计
- java面向对象设计的六大原则
- Java面向对象的设计原则
- Java面向对象的设计和分析
- Java:面向对象设计的三个特征
- java面向对象的设计原则
- Java对于面向对象编程的设计
- 面向对象_长方形案例练习
- 面向对象的设计
- 面向对象的设计
- 面向对象的设计
- Android 系统下模拟触点击的功能与权限
- ps裁剪图片
- 如何使用SQLServer Session
- oralce中相关的概念整理
- PHP方案实现数据导出
- 面向对象的疑惑,java设计正方形,长方形
- 使用Nginx的proxy_cache缓存功能取代Squid
- 【电子书下载】《Android应用程序开发与典型案例》完整版!!
- XML 文档定义的两种形式(DTD,SCHEMA)
- jquery outerHeight方法 outerWidth方法
- 路在脚下,梦就在前方
- wireshark——Http报文分析
- 公交广告在线创始人陆行根参加第43届世界广告大会
- boost string