public class test1
{
classA obj = new classA()
}
public class test2 extends test1
{
public void test() {
//unable to access object 'obj'
}
}
从子类我无法访问在父类中创建的对象。如何使用Child类中的Parent类中创建的对象?
public class test1
{
classA obj = new classA()
}
public class test2 extends test1
{
public void test() {
//unable to access object 'obj'
}
}
从子类我无法访问在父类中创建的对象。如何使用Child类中的Parent类中创建的对象?
您还没有为test1
类的obj
成员指定任何访问修饰符,这使得它在默认情况下为私有包。因此,只有在与test1
相同的包中,您的test2
子类才能访问它。如果将其更改为protected classA obj = new classA();
,则无论使用哪个包test2
,都可以访问它。
也就是说,将所有成员定义为私有,并通过accesssor方法访问它们是一种更好的做法。
要允许派生类访问父成员,则需要指定protected
或public
public class test1 {
protected classA obj = new classA()
// ^^^^^^^^
}
public class test2 extends test1 {
public void test() {
// now you can access obj in test2
}
}
你给了默认的访问,我看到他们都在默认包,那么你应该能够访问相同。如果您在不同的包中定义它们,那么你应该暴露getter方法在父类,如:
public classA getClassA() {
return obj1;
}
或者为保护像下面你可以标记该字段:
protected classA obj = new classA()
您可能需要从运行这些两个单独的文件分配给相同的包。 文件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
创建,如果它是在我目前的类中已定义的对象。
看到这个问题:http://stackoverflow.com/questions/20746444/regarding-access-specifiers – Maroun