Java如何使用子类的某些function()中的变量?

时间:2016-10-28 09:24:01

标签: java class inheritance parent-child

我写了一段代码如下:

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使我的参数可以在周围使用。

但我不知道使用数据声明的确切方法。所以我会继续学习。

4 个答案:

答案 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();    
        }
    }