黑马程序员技术交流社区

标题: [继承],构造方法能够覆盖么? 矩形和正方形的例子 [打印本页]

作者: Diors    时间: 2015-6-19 21:19
标题: [继承],构造方法能够覆盖么? 矩形和正方形的例子
如题,构造方法能够覆盖么?如何覆盖?

看下面案例:
  1. class Rectangle {
  2.         private float width;
  3.         private float height;
  4.         Rectangle(float width, float height) {
  5.                 this.width = width;
  6.                 this.height = height;
  7.         }
  8.        
  9.         public float getArea() {
  10.                 return 2*width*height;
  11.         }
  12. }

  13. class Square extends Rectangle {
  14.         Square(float width) {
  15.                 this.width = width;
  16.                 this.height = width;
  17.         }
  18. }
复制代码
正方形属于特殊的矩形,所以正方形应当与矩形有继承关系,那么问题来了,矩形的构造方法有两个参数,分别传入宽和高,而正方形除了继承这个构造方法之外还应当有一个传入一个边长参数的构造方法。然而这个构造方法的第一行会隐式执行父类默认构造方法,然后出现了问题,此处应如何解决或者避开?



作者: g552092947    时间: 2015-6-19 21:54
继承这里应该这么写
  1. class Square extends Rectangle {
  2.             Square(float size) {
  3.                     super(size, size);
  4.             }
复制代码

作者: Diors    时间: 2015-6-19 22:13
g552092947 发表于 2015-6-19 21:54
继承这里应该这么写

好吧,谢谢,这也是一个解决办法,不过我仍然想请教有没有方法可以覆盖或者禁用父类默认构造方法么?
作者: lizhi1817    时间: 2015-6-20 00:46
应该不可以的吧
作者: zhaopy    时间: 2015-6-20 09:13
class Square extends Rectangle {
            Square(float size) {
                    super(size, size);
            }


正解
作者: guohaichang    时间: 2015-6-20 09:22
两个类名不一样,你要覆盖什么呢?思路是错的!
作者: cyd1058    时间: 2015-6-20 09:26
只能自己创建一个构造方法才不用默认构造方法
作者: zc强盗    时间: 2015-6-20 12:06
父类中的构造方法只是给子类进行初始化的,子类是不能够重写的,何谈覆盖,你这个思路不对啊
作者: liu100chao    时间: 2015-6-20 14:49
访问指定的父类构造函数!
作者: 遗失丨美好    时间: 2015-6-20 16:22
支持一个~~~~~~
作者: fyg408224345    时间: 2015-6-20 16:24
子类和父类的构造方法名就不一样怎么覆盖?构造方法是不能覆盖的好吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2