我写了一段代码如下:
class MyParent {
String a = "abcdefg";
String b;
public void print() {
b = "ABCDEFG";
System.out.println(a);
}
}
class MyChild extends MyParent {
String c = super.b;
public void print2() {
System.out.println(c);
}
}
public class Parent {
public static void main(String args[]) {
MyParent mp = new MyParent();
mp.print();
MyChild mc = new MyChild();
mc.print2();
}
}
有两个班,他们是父母和孩子。
b
中声明了class MyParent
,并在函数print()
中给出了值。
我想在孩子班b
中打印MyChild
。但是,如果我运行代码,它可以正确打印,但b
显示null
。
我是Java的新手。请帮帮我。
更新
感谢大家回答我的问题。我找到了解决方案。
我用最简单的方法。我将其更改为**static String b**
。
static使我的参数可以在周围使用。
但我不知道使用数据声明的确切方法。所以我会继续学习。
答案 0 :(得分:1)
它打印null
因为在MyParent
类中您将其声明为空String
。您在b
方法中初始化了print()
。因此,如果您想获取b
的值,您可以执行此操作:
MyChild mc = new MyChild();
mc.print();
答案 1 :(得分:0)
mp和mc对象的实例不同。所以b的值设置为" ABCDEFG"在对象mp中,但mc.b仍为空。
尝试拨打mc.print()
,然后拨打mc.print2()
但是,如果您希望对象的不同实例在更新时共享相同的b值,则可以将b
设为静态。
答案 2 :(得分:0)
你必须致电
print()
MyParent初始化" b" 的方法。你没有初始化它。
答案 3 :(得分:0)
当你制作扩展类evry方法和属性谁得到保护,现在如果父母得到字符串b少孩子也得到了字符串b 如果你想要孩子的字符串b将是父母中字符串b的相同值,请构建一个构造函数并在构造函数内部生成 this.b = super.b ,并在创建对象时使用它的意思子类的初始化属性。 现在在这段代码中你不应该像面向对象那样初始化属性。
class MyParent {
String a = "abcdefg";
String b="ABCDEFG";
public MyParent(){}
public void print() {
System.out.println(a);
}
}
class MyChild extends MyParent {
public MyChild(){
this.b =super.b;
}
public void print2() {
System.out.println(b);
}
}
public class Parent {
public static void main(String args[]) {
MyParent mp = new MyParent();
mp.print();
MyChild mc = new MyChild();
mc.print2();
}
}