我不明白下面的程序。我提到了我在代码中遇到的两个错误。但我不明白原因
import java.io.*;
class sdata
{
float per;
int m,tm=0,i,n;
sdata(int n)throws Exception
{
DataInputStream dis2=new DataInputStream(System.in);
for(i=1;i<=n;i++)
{
System.out.print("enter marks of subject"+i);
int m=Integer.parseInt(dis2.readLine());
tm=tm+m;
}
per=tm/n;
}
}
class disdata extends sdata
{
//below line gives an error "constructor sdata in class xyz.sdata cannot be applied to given types required:int found:no arguments"
disdata() throws Exception{
System.out.println("TOTAL MARKS OF SUBJECTS:"+tm);
System.out.println("PERCENTAGE OF STUDENT:"+per);
}
}
class sresult
{
public static void main(String args[])throws Exception
{
DataInputStream dis=new DataInputStream(System.in);
int n=Integer.parseInt(dis.readLine());
disdata objj=new disdata();
//the below line creates an error saying "cannot find symbol"
objj.sdata(n);
}
}
最佳答案
sdata
是disdata
的超类,当您创建不带参数的disdata对象时,在disdata
构造函数中您没有调用sdata
int构造函数,因此默认情况下它将尝试不查找任何参数构造函数,该函数不可用,因此会产生错误。
您可以从sdata
构造函数调用sdata
int构造函数,也可以在disdata
中创建一个无参数的构造函数。
class sdata {
float per;
int m, tm = 0, i, n;
sdata(int n) throws Exception {...}
//No argument constructor
sdata(){}
}