2014-11-17 57 views
0
public class test1 
{ 
    classA obj = new classA() 
} 


public class test2 extends test1 
{ 
    public void test() { 

     //unable to access object 'obj' 
    } 
} 

从子类我无法访问在父类中创建的对象。如何使用Child类中的Parent类中创建的对象?

+0

看到这个问题:http://stackoverflow.com/questions/20746444/regarding-access-specifiers – Maroun

回答

3

您还没有为test1类的obj成员指定任何访问修饰符,这使得它在默认情况下为私有包。因此,只有在与test1相同的包中,您的test2子类才能访问它。如果将其更改为protected classA obj = new classA();,则无论使用哪个包test2,都可以访问它。

也就是说,将所有成员定义为私有,并通过accesssor方法访问它们是一种更好的做法。

1

要允许派生类访问父成员,则需要指定protectedpublic

public class test1 { 
    protected classA obj = new classA() 
// ^^^^^^^^ 
} 


public class test2 extends test1 { 
    public void test() { 

     // now you can access obj in test2 
    } 
} 
0

你给了默认的访问,我看到他们都在默认包,那么你应该能够访问相同。如果您在不同的包中定义它们,那么你应该暴露getter方法在父类,如:

public classA getClassA() { 
    return obj1; 
} 

或者为保护像下面你可以标记该字段:

protected classA obj = new classA() 
0

您可能需要从运行这些两个单独的文件分配给相同的包。 文件1名为test1.java

package TestStuff; 
import java.util.List; 
public class test1 { 
    List <String> newStringList; 
} 

文件2名为test2.java

package TestStuff; #same package at test1.java 
public class test2 extends test1 { 
    public void test(){ 
     String d = "dog"; 
     for (int i = 0; i < d.length(); i++){ 
      newStringList.add(d); 
     } 
    } 
} 

现在我可以访问我test1.java创建,如果它是在我目前的类中已定义的对象。

相关问题