2 oiu1010110 oiu1010110 于 2016.03.25 19:18 提问

java 子类构造函数要用到父类的方法判断成功后再构造,但这样的话super()不是第一句就报错

父类是点,里面有方法判断是不是同一个点,子类是直线,我在子类直线构造时要判断两个点是否相等,因此调用父类的方法,但是这样下面先构造父类super()就不对,该怎么解决呢? 谢谢解答。

2个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.25 20:01

首先,你的父类是不是有有参构造函数呢?如果有的话,子类构造函数的第一句就必须是super(参数)调用父类的构造函数。
其次,父类有有参数构造函数,第一句就先super(参数),然后再调用父类的方法。
类似:

 public class Son extends Parent{
    public Son(){
      //如果Parent类有有参数构造函数,第一句必须是,没有的话,可以没有下面这一句
        super(参数);
       //先调用父类的某个方法
         super.testEqual();
    }
}
wojiushiwo945you
wojiushiwo945you 回复Koreyou: 最后就是你说的这种需求完全可以设计成子类的方法,而不是构造函数的逻辑。new 对象时,构造函数其实就是初始化类的属性用的。不应该涉及到其他逻辑行为。
一年多之前 回复
wojiushiwo945you
wojiushiwo945you 回复Koreyou: 还有你这个设计将父类类型作为子类构造函数额参数的设计不好,构造函数就是创建对象的,没有必要还有条件地创造对象。
一年多之前 回复
wojiushiwo945you
wojiushiwo945you 回复Koreyou: 只要父类有构造函数,那么子类构造函数的第一句必须先super()调用父类构造函数。
一年多之前 回复
oiu1010110
oiu1010110 是这样的,子类构造函数我传了两个父类对象作为参数,子类构造函数是在这两个参数是通过调用父类方法返回true时才构造子类,所以我开始想的是先判断再决定要不要构造子类,在构造子类前一句写super(),这样确实报错了。然后我在父类里面又加了一个无参构造函数,在子类里面直接不写super(),然后测试可以运行,是不是因为我在父类里面写了无参构造,这样子类就默认有super()了呢?另外前面要先判断再构造子类的时候构造父类这样理解是对的还是要理解成不管构不构造子类成功,只有在写子类构造函数,就一定要在第一句加super()呢?
一年多之前 回复
StressedOut
StressedOut   2016.03.25 22:13

请记住一点,所有的属性是在构造方法中初始化的,在构造方法执行前所有的属性都是默认值。可能对你有帮助

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!