Java中继承的障碍
我不懂下面的程序。我提到了我在代码中遇到的两个错误。但我不明白原因Java中继承的障碍,java,Java,我不懂下面的程序。我提到了我在代码中遇到的两个错误。但我不明白原因 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++) { Syst
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);
}
}
import java.io.*;
类sdata
{
浮点数;
int m,tm=0,i,n;
sdata(int n)引发异常
{
DataInputStream dis2=新的DataInputStream(System.in);
对于(i=1;i如果你的超类
有一个重载参数构造函数
,你的子类必须显式地调用
disdata() throws Exception{
super(some int vale youwanna pass);
System.out.println("TOTAL MARKS OF SUBJECTS:"+tm);
System.out.println("PERCENTAGE OF STUDENT:"+per);
}
记住super()
应该是disdata()构造函数中的第一行
disdata objj=new disdata();
//the below line creates an error saying "cannot find symbol"
objj.sdata(n);
constructor
不是方法。您试图用objj调用构造函数sdata(n),这是错误的。请使用new运算符调用它。
比如:
如果您的超类
具有一个重载参数构造函数
,则您的子类必须显式地调用
disdata() throws Exception{
super(some int vale youwanna pass);
System.out.println("TOTAL MARKS OF SUBJECTS:"+tm);
System.out.println("PERCENTAGE OF STUDENT:"+per);
}
记住super()
应该是disdata()构造函数中的第一行
disdata objj=new disdata();
//the below line creates an error saying "cannot find symbol"
objj.sdata(n);
constructor
不是方法。您试图用objj调用构造函数sdata(n),这是错误的。请使用new运算符调用它。
比如:
您不能将构造函数作为普通方法调用,这是您尝试使用objj.sdata(n);
来实现的。
构造函数不是方法。您不能将构造函数作为普通方法调用,您可以尝试使用objj.sdata(n);
。
构造函数是没有方法的。sdata
是disdata
的超类,当您创建一个没有参数的disdata对象时,在disdata
构造函数中,您没有调用sdata
int构造函数,因此默认情况下,它将尝试查找不可用的sdata
构造函数,所以它给出了错误
您可以从disdata
构造函数调用sdata
int构造函数,或者在sdata
中装入无参数构造函数
class sdata {
float per;
int m, tm = 0, i, n;
sdata(int n) throws Exception {...}
//No argument constructor
sdata(){}
}
sdata
是disdata
的超类,当您在disdata
构造函数中创建不带参数的disdata对象时,您没有调用sdata
int构造函数,因此默认情况下,它将尝试查找不可用的参数sdata
构造函数,因此它会给出错误
您可以从disdata
构造函数调用sdata
int构造函数,或者在sdata
中装入无参数构造函数
class sdata {
float per;
int m, tm = 0, i, n;
sdata(int n) throws Exception {...}
//No argument constructor
sdata(){}
}
Java强制执行构造函数的正确链接。构造函数体中的第一个语句必须是this(…)
(对同一类的另一个构造函数的调用)或super(…)
(对超类构造函数的调用),如果不包含显式调用,Java将插入对super()的隐式调用
在构造函数主体的其余部分之前。由于您的sdata
没有无参数构造函数,因此无法编译
你要么
将无参数构造函数添加到sdata
或
将super(0)
调用作为disdata
构造函数中调用现有单参数超类构造函数的第一件事
Java强制执行构造函数的正确链接。构造函数体中的第一个语句必须是this(…)
(对同一类的另一个构造函数的调用)或super(…)
(对超类构造函数的调用),如果不包含显式调用,Java将插入对super()的隐式调用
在构造函数主体的其余部分之前。由于您的sdata
没有无参数构造函数,因此无法编译
你要么
将无参数构造函数添加到sdata
或
将super(0)
调用作为disdata
构造函数中调用现有单参数超类构造函数的第一件事
此外,阅读这些内容可能会很有用。坚持这些内容将使stackoverflow上的人员和需要使用/更改代码的任何人都能够快速了解您在做什么;)oh okie..我下一次肯定会这么做。此外,仔细阅读可能会很有用。坚持这些会让stackoverflow上的人和任何需要使用/更改代码的人都能快速理解你在做什么;)oh okie..我下一次肯定会这么做。如果是在我的代码中编写//disdata objj=new disdata(n)然后我必须重写disdata的构造函数,比如disdata(intj){super(j);System.out.println(“科目总分:+tm);System.out.println(“学生百分比:+per”);}如果在我的代码中写入//disdata objj=new disdata(n)然后我必须重写disdata的构造函数,比如disdata(intj){super(j);System.out.println(“科目总分:+tm);System.out.println(“学生百分比:+per”);}非常感谢。我感谢你的帮助。非常感谢。我感谢你的帮助。非常感谢。我感谢你的帮助。非常感谢。我感谢你的帮助。非常感谢。我感谢你的帮助。非常感谢。我感谢你的帮助。