Java 无法在eclipse中的单独类中创建子类的对象
我正在学习java中的继承。在编写小代码时,我发现我们不能在子类中访问超类的私有成员 这是我的密码:Java 无法在eclipse中的单独类中创建子类的对象,java,Java,我正在学习java中的继承。在编写小代码时,我发现我们不能在子类中访问超类的私有成员 这是我的密码: class A { int i; private int j; void setij(int x, int y) { i = x; j = y; } class B extends A { int b; void sum() { b = i + j;
class A {
int i;
private int j;
void setij(int x, int y) {
i = x;
j = y;
}
class B extends A {
int b;
void sum() {
b = i + j;
}
}
当我在eclipse中创建一个新类时,我无法在类a中创建sublcass B的对象
class mainclass{
public static void main(String args[]){
B object = new B(); ----error
}
}
}
错误表示需要创建类B
我可以知道为什么会发生。。?它的发生不是一个问题,但我想解决和理解它发生的逻辑
谢谢这是因为类
B
存在于类A
中,它需要在类A
之外创建,例如:
class A {
int i;
private int j;
void setij(int x, int y) {
i = x;
j = y;
}
}
class B extends A {
int b;
void sum() {
b = i + j;
}
}
class A {
int i;
private int j;
void setij(int x, int y) {
i = x;
j = y;
}
class B extends A {
int b;
void sum() {
b = i + j;
}
}
}
使用此代码,可以从包内的所有类访问类B
(和A
)。如果希望从当前包外部访问这些类,则需要在单独的文件中创建这些类,并将它们标记为public
更多关于类的访问修饰符
Upate
如果要将类B
定义为A
中的内部类,则需要封闭类的实例(A
在本例中)来访问B
,例如:
class A {
int i;
private int j;
void setij(int x, int y) {
i = x;
j = y;
}
}
class B extends A {
int b;
void sum() {
b = i + j;
}
}
class A {
int i;
private int j;
void setij(int x, int y) {
i = x;
j = y;
}
class B extends A {
int b;
void sum() {
b = i + j;
}
}
}
现在,要实例化B
,您需要执行以下操作:
A a = new A();
B b = a.new B();
当然,与访问修饰符相同的规则将应用于内部类实例(除了内部类能够访问封闭类的私有成员这一事实),这是因为类B的实例必须与类A的实例相关。因此,您必须首先创建类A的实例,然后创建类B的实例:
A a = new A();
a.setij(1,2);
B b = a.new B();
b.setij(3,4);
b.sum();
System.out.println(b.b);
(如果您想知道,结果是5)是,或声明static@MauricePerry是的,没错@DarshanMehta…但我正在同一个包中创建主类。。。!!呃。。。否:这不起作用,因为j是私人的!以下是屏幕截图,您是否尝试过
A.B object=new A.B()代码>B
是嵌套类(可能还需要声明为静态类
),子类不需要也是内部类。是否收到错误消息?在我看来,似乎你忘记了一个结束括号。不确定这是否是原因。@khelwood.。为什么。。?