日期:2014-05-20  浏览次数:20857 次

新手请教类继承问题
如果父类有构造方法T();和T(int n),那么子类建构造方法时,如果构造方法P()已经在第一行用super(300)调用了父类的第二个构造方法,那么他还是会自动调用与他同为空参数的父类构造方法T()么?个人认为不会调用T()了,但是我在视频中看到如果这时候去掉父类的T()就会出错,难道每个子类的构造方法都要先自动调用一个父类与之参数一致的构造方法? 


另外的一个问题:
class T {
private int i = 0; 
int j; 
protected int k; 
public int z; 

}

class p {
public static void main(String[] aa){ 
T t = new T(); 
System.out.println(t.k); 

}
以上是第一个Testfangkong.java文件,编译成功后。在同一文件夹创建一个Testf.java文件
public class Testf extends T{
public void ma() { 
System.out.println(k); 

}编译时提示找不到类T,是不是包的设置出现问题了,视频中好像也没导入什么包啊 


------最佳解决方案--------------------
1、顺序就是那样,无参构造都是隐式调用好的
2、那个先编译的类是否在你的classpath中?
------其他解决方案--------------------
第一问:
class Super {
public Super() {
}
}

class Sub extends Super {
public Sub(int i) {
super();
outPut("me");
}

void outPut(String string){
System.out.println(string);
}
}
没有报错,你知道答案了吧。

第二问:
大哥,没有说找不到  T class,我试过了,就copy你的代码,可能是你前面有  class T 的文件没有先编译好,
另外:LZ你写的 class  name 不规范哈,  首字母应该大写··· 
------其他解决方案--------------------
引用:
1、顺序就是那样,无参构造都是隐式调用好的
2、那个先编译的类是否在你的classpath中?


第二个问题按照你说的解决了,第一个还是不太懂,隐式调用我知道,但是我想知道为什么P()在已经调用父类的T(20)这个有参数的构造方法的前提下,去掉父类的T()就会出错?已经调用了一个有参数的父类方法应该就不用在弄个默认的了吧,怎么还是会错?
------其他解决方案--------------------
猜测楼主是在命令行下手动执行javac编译的吧? 
这个不是继承问题,请楼主搜索关于命令行javac编译多java文件的方法,应该会明白问题所在
------其他解决方案--------------------
你的第二个问题说的我不太明白你的意思,把你的代码copy上来吧,
很模糊, 你说对了,你定义一个有参数的构造方法,系统不会为你添加一个无参的构造方法, 你调用的时候肯定会错了哈
------其他解决方案--------------------
引用:
你的第二个问题说的我不太明白你的意思,把你的代码copy上来吧,
很模糊, 你说对了,你定义一个有参数的构造方法,系统不会为你添加一个无参的构造方法, 你调用的时候肯定会错了哈


问一个问题,是不是子类中有定义一个空参数的构造方法,父类中也一定要有?(即使子类的构造方法中调用了父类中有参数的构造方法)