有关正方形不是长方形的讨论已经有很多了,这也是面向对象的分析与设计中,特别是类的设计中的一个很经典问题,一般相关教科书中都有这个例子。不过很多初学者基本上都很迷糊。主要是教科书讲得太专业,太深奥了。个人认为可以从下面两方面来简单理解。

首先看看长方形和正方形的特点:

1、长方形:

A、 属性:长,宽

B、方法:

求面积=长*宽            求周长=(长+宽)*2

2、正方形:

A、属性:边长  [或者 长=宽]

B、方法:

求面积=边长的平方  [或者 长*宽]      求周长=边长*4   [或者 (长+宽)*2]

有了上面的对比以后,可以这样认识它们:
   其一,绝对来看,长方形与正方形本来就不是同类,当然正方形更不是长方形的子类,为什么这么说呢,因为它们从属性到方法,都有很大的差别,长方形具有两个属性,长与宽,而正方形却只有一个属性,边长。并且两者方法的表述也可以完全不同。互相之间看不到继承,包含,或者从属关系。根本就是独立的两个不同的类。
   其二,相对来看,正方形就是长方形了,具有长方形的所有特点,具体的正方形表现为,两个字段值相等的长方形类的实例。所以从这个角度,可以认为,长方形没有多态,不存在正方形这样的子类。
  
   有了这两种认识,在具体解决问题的时候,就比较简单了。在类的设计的时候有两种思路,第一种,可以分别设计长方形,正方形两个类,井水不犯河水。第二种,只需要设计一个长方形类就行了。
   个人理解,仅供批评。

也谈正方形不是长方形相关推荐

  1. n*m的格子中正方形个数和长方形个数

    问题描述 1.设有一个nm方格的棋盘(1≤m,n≤100). 求出该棋盘中包含多少个正方形.多少个长方形(不包括正方形). 例如:当n=2,m=3时 正方形的个数有8个:即边长为1的正方形有6个: 边 ...

  2. 结合面向对象设计原则分析:正方形是否是长方形的子类?

    在面向对象编程中,正方形和长方形都可以作为一个类来实现.但是,是否可以说正方形是长方形的子类呢? 根据里氏替换原则(Liskov Substitution Principle),子类应该可以完全替代父 ...

  3. 【c++】求正方形形、长方形、圆形的周长和面积

    [问题描述]用c++实现求正方形.长方形.圆形的面积和周长,要求使用派生和继承 [编译环境] ubuntu20.04  g++ [实现思路]使用c++的多态与继承,基类是形状类,重写求周长和面积函数, ...

  4. java求面积Shape类_Shape-2,形状类,正方形类,长方形类,圆类,求周长面积

    [java]代码库import java.util.Scanner; public class Main{ public static void main(String[] args) { Scann ...

  5. 设计一个程序显示一个桌子的信息,包括桌子的类型(长方形、正方形、圆形)、腿数、高度和面积,其中面积是通过根据桌子类型不同而输入不同的数据来计算得出

    设计一个程序显示一个桌子的信息,包括桌子的类型(长方形.正方形.圆形).腿数.高度和面积,通过根据桌子类型不同而输入不同的数据来计算得出: 要点提示: 1)  桌子的形状可以使用一个整数变量来表示,例 ...

  6. robbin谈如何学习设计模式

    源自:http://www.kuqin.com/beginner/20054.html 备注:设计模式的根本也是为了代码重用,那只要你做到了很好的代码重用,你是否是否了GOF 设计模式23种之一根本不 ...

  7. 两个形状不同的长方形周长_“解决问题——怎样围周长最短”教学思考与设计...

    安徽省淮北市第一实验小学 丁雪洁 课前慎思 本节课是人教版三年级上册第七单元的例5,是在学生已经认识了周长,并会计算长.正方形的周长的基础上进行教学的,通过运用四边形及周长的知识解决生活中的简单问题, ...

  8. 周长相等的正方形面积一定相等_三年级下册数学期末重点——面积

    面积知识点 一.面积的意义 物体的表面或封闭图形的大小,就是他们的面积. 二.长度单位与面积单位的区别 用长度单位表示物体的长短或封闭图形一周的长度:用面积单位表示物体表面或封闭图形的大小. 注:面积 ...

  9. 【C语言练习——打印正方形及其变形】

    打印正方形及其变形 前言 1.打印图形1 2.打印图形2 3.打印图形3 4.打印图形4 总结 前言 正方形形是一种特殊的平行四边形,定义见百度百科 本文主要是写关于菱形的练习题,在屏幕上打印菱形. ...

  10. 守护长方形问题 C语言

    守护长方形 题目描述 围棋大师有一块传家宝棋盘,这块棋盘的方格数为 N×M,为了保证这块传家宝的安全,围棋大师把这块棋盘交给他最信任的弟子来保管. 弟子喜欢守护全世界最好的长方形,于是他想知道这块棋盘 ...

最新文章

  1. hadoop知识整理(4)之zookeeper
  2. SQL CTE学习总结
  3. GDCM:排序图片的测试程序
  4. sql 相加_SQL多表查询
  5. Sentinel(十一)之黑白名单控制
  6. FeignClient调用服务及上传文件的注意点及问题
  7. treeset java_Java TreeSet Higher()方法与示例
  8. 付忠庆的练习小笔记-Codeforces #276 Div2 C
  9. 在PHP中开启CURL扩展,使其支持curl()函数
  10. jt808server .java_jt808-server
  11. 计算机网络ospf配置命令,华为OSPF协议基本配置 -电脑资料
  12. 怎样判断一个诊断(风险预测)模型的好坏?
  13. java 群组_用户和群组
  14. iwatch 1234 代的区别
  15. 最大似然估计(MLE)与最小二乘估计(LSE)的区别
  16. 深度剖析UglifyJS
  17. 《金字塔原理》书评 - 伟大的方法论,但不是一本好书
  18. 安全审计平台Wazuh架构及功能概览
  19. APP和小程序有什么区别?
  20. wordpress插件_适用于WordPress的10个最佳联盟营销工具和插件

热门文章

  1. kux-mp4转码Python3脚本
  2. 这4个工具可以帮你图片放大后不模糊保持清晰!
  3. 去哪里学习行业知识?
  4. 文字编码和Unicode
  5. 内存颗粒位宽和容量_内存颗粒的位数是指什么?
  6. 微信小程序UI设计(一)之开发前言
  7. Linux 查看文件格式和更改文件格式
  8. PS 如何简单的更换图片的背景色
  9. 通读SLA文档之后的感受
  10. 多序列比对要多久时间_序列比对,几个常用的多序列比对软件