Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中继承的障碍_Java - Fatal编程技术网

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”);}非常感谢。我感谢你的帮助。非常感谢。我感谢你的帮助。非常感谢。我感谢你的帮助。非常感谢。我感谢你的帮助。非常感谢。我感谢你的帮助。非常感谢。我感谢你的帮助。