java对象有个问题不懂

来源:百度知道 编辑:UC知道 时间:2024/06/20 02:25:29
class king {
int a, b, c;

double d, e, f;

public king() {
a = 5;
b = 4;
c = 8;
d = 5.5;
e = 4.2;
f = 9.2;

}

king(int a, int b, int c, double d, double e, double f) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.e = e;
this.f = f;
}

public int king1() {
int king1;
king1 = 0;
king1 = a + b + c;
return king1;
}

public double king2() {
double king2;
king2 = 0;
king2 = d * e * f;
return king2;
}
}
class sum extends king{
float k;
public sum(){
a=5;
b=3;
c=8;
d=5.2;
e=2.4;
f=9.1;
k=(float)2.1;
}
public sum(int a1,int b2,int c3,double d4,double e4,double f5,float k6){
a=a1;
b=b2;
c=c3;
d=d4;
e=e4;
f=f5;
k=k6;
}

我来给你详细讲解下:

首先,着个代码包含3个类:
1.java类包含主方法
2.king类包含2个构造方法(一个有6参数,一个无参)和2个方法(king1()返回为int,king2()返回为double)
3.sum类是king的子类,并且包含自己的2个构造方法(同样是:一个有7参数,一个无参),然后也包含一个方法是king3(),返回double类型.

分析完毕了开始看执行:
编译到sum k1=new sum(3,4,5,6.6,7.7,8.8,5.2);时 报错:

明明包含有这个构造函数,为什么不能调用?

这个时候就得看JAVA的规则了,继承的一种规则是"Java在执行子类的构造函数之前,会先调用父类中的构造函数",所以程序就去找父类中的有参数构造函数了,结果,他找到的父类的有参数构造函数只有6个参数,你的这个代码里面有7个,结果,他就说,找不到这个构造方法.

说到这里本来就结束了.不过说个题外话,如果这个代码中,我要调用子类中的那个7个参数的构造方法,是不是没有办法呢?我觉得是被父类构造方法覆盖了,所以不能调用,看后来的有没有补充呢?

楼主是不是把这几个class写在一个文件里了?
调用
sum k1=new sum(3,4,5,6.6,7.7,8.8,5.2); 的时候

需要sum的构造方法已经存在,也就是说,需要sum的class文件,但是如果写在一起的话sum这个类还没有编译成class文件,因为所有的类是一起编译的 ,那么这里就找不到构造方法。所以无法编译通过

建议楼主把这几个类都分开放在不同的文件中。这样应该能解决问题了。

K1是SUM的对象,但是king1()是KING里面的方法,应该只有KING创建的对象才能使用king1()方法啊,因此k1.king1()这种写法本身就是错误的。

这几个类都分开放在不同的文件中