A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如题,构造方法能够覆盖么?如何覆盖?

看下面案例:
  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. }
复制代码
正方形属于特殊的矩形,所以正方形应当与矩形有继承关系,那么问题来了,矩形的构造方法有两个参数,分别传入宽和高,而正方形除了继承这个构造方法之外还应当有一个传入一个边长参数的构造方法。然而这个构造方法的第一行会隐式执行父类默认构造方法,然后出现了问题,此处应如何解决或者避开?


11 个回复

倒序浏览
继承这里应该这么写
  1. class Square extends Rectangle {
  2.             Square(float size) {
  3.                     super(size, size);
  4.             }
复制代码
回复 使用道具 举报
g552092947 发表于 2015-6-19 21:54
继承这里应该这么写

好吧,谢谢,这也是一个解决办法,不过我仍然想请教有没有方法可以覆盖或者禁用父类默认构造方法么?
回复 使用道具 举报
应该不可以的吧
回复 使用道具 举报
class Square extends Rectangle {
            Square(float size) {
                    super(size, size);
            }


正解
回复 使用道具 举报
两个类名不一样,你要覆盖什么呢?思路是错的!
回复 使用道具 举报
只能自己创建一个构造方法才不用默认构造方法
回复 使用道具 举报
父类中的构造方法只是给子类进行初始化的,子类是不能够重写的,何谈覆盖,你这个思路不对啊
回复 使用道具 举报
访问指定的父类构造函数!
回复 使用道具 举报
支持一个~~~~~~
回复 使用道具 举报
子类和父类的构造方法名就不一样怎么覆盖?构造方法是不能覆盖的好吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马