派生 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;
}
}
我是 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;
}
}