2016-10-28 55 views
-1

我写了一段代码如下:Java如何使用子类的某个函数()中的变量?

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

有两类,他们是父母&孩子。 在class MyParent中声明了b,并在函数print()中给出了一个值。
我想在子类MyChild中打印b。但是如果我运行代码,它可以正确打印,但b显示null

我是Java新手。请帮助我。


UPDATE

谢谢大家回答我的问题。我找到了解决方案。

我用最简单的方法。我将它改为**static String b**

静态使我的论点可以四处使用。

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

+0

https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html,http://www.javaworld.com/article/2987426/core-java/java-101-继承功能于Java的部分1。html –

+0

您已经创建了两个完全独立的对象 - “mp.b”将是“ABCDFEF”,但“mc.b”是“null”,因为您从未将其设置为其他任何对象。 –

回答

0

mp和mc对象的实例是不同的。因此,b的值在对象mp中设置为“ABCDEFG”,但mc.b仍然为空。

尝试调用mc.print()然后mc.print2()

但是如果你想要对象的不同实例,以B股对更新的相同的值,那么你可以让b静态。

0

你必须调用

print() 

MyParent的方法来初始化“B”。你没有初始化它。

2

它打印null,因为在MyParent类中声明它为空String。您在print()方法中初始化了b。所以,如果你想利用b值,你可以这样做:

MyChild mc = new MyChild(); 
mc.print(); 
0

当你让扩展类埃夫里的方法和属性,谁得到保护,少去孩子现在如果父母有串B中的孩子也得到了字符串b 如果你想要字符串b的孩子将是相同的价值的字符串b在父母u做一个构造函数,并在构造函数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();  
     } 
    } 
相关问题