派生 class 中的变量可能尚未初始化(使用构造函数)

Variable in derived class may have not been initialized (using constructors)

我是 Java 编程的新手,我正在尝试使用继承和构造函数。

我的parentclass:

class user{

    private String name;
    private float balance;
    private int accno;
    private int passw;

    public String getName()
    {
        return name;
    }
    .
    .
    .
    //getters and setters for the remaining variables.
}

我的派生class:

class userFunct extends user
{

    userFunct(int accno,String name,int passw,float bal){                   //parametrized constructor

        super.setPassw(passw);
        super.setName(name);
        super.setAccno(accno);
        super.setBalance(bal);
    }

在我的主程序中,我这样做:

public static void main()
{
    userFunct obj=new userFunct(accno,name,passw,bal);  //Creating an object userFunct
    .
    .
    .
}

我收到一条错误消息

variable accno may not have been initialized

现在因为这有很多行我写了一小段代码

import java.util.*;
import java.io.*;

class a{
    public int x;

}

class b extends a{
    /*static*/ void pri(a obj)
    {
        System.out.println("Class b"+obj.x);
    }
    b(int num)
    {
        super.x=num;
    }
}


public class Main
{
    int num=9;
    public static void main(String[] args) {

        b objb=new b(9);
        objb.pri(objb);
    }
}

这工作正常,输出正确。 当我比较两个代码时,我无法发现错误。

我不知道这是否是我的一些愚蠢错误,或者是否有一些我未能理解的基本概念。无论哪种方式,我都想知道这里发生了什么

首先,我认为我认为比被问到的问题更重要的一点是:请认真对待代码中的命名约定你的学习之旅的开始。您可能认为 啊..现在不重要了..我对其他东西感兴趣..但请始终根据命名约定和良好做法命名您的 variables/classes/methods , 否则你会很容易习惯这一点.. 即使在 Java 行业工作了大约十年后,我认为 正确的命名 仍然是最重要的之一事情,即使是高级工程师也缺乏作为一种行为模式。从一开始就保持代码整洁。

我已经在 IntelliJ 中重写了你的第一个问题,确保我实现了相应的 getters/setters 并且我初始化了我之前传递给 userFunct 构造函数的所有变量我通过了。

类似

    public static void main(String[] args) {
        int accno=1;
        String name="test";
        int passw=1234;
        float bal=2f;
        userFunct obj=new userFunct(accno,name,passw,bal);
    }

..我没有收到任何编译时警告或错误。

确保初始化传递给 userFunct 的构造函数的所有内容,并且您已正确编写 setter 和 getter。

您在 user class 中共享的两个代码之间的区别您将所有变量声明为 private未初始化。在您的 class a 中,您将变量声明为 public.

所以给所有变量赋初值一个享受

class user {
String name = "";
float balance = 0.0f;
int accno = 0;
int passw = 0;

public String getName()
{
    return name;
}

public void setName(String name) {
    this.name = name;
}

public float getBalance() {
    return balance;
}

public void setBalance(float balance) {
    this.balance = balance;
}

public int getAccno() {
    return accno;
}

public void setAccno(int accno) {
    this.accno = accno;
}

public int getPassw() {
    return passw;
}

public void setPassw(int passw) {
    this.passw = passw;
}

}