Java 无法在eclipse中的单独类中创建子类的对象

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;

我正在学习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;
        }
    }
当我在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.。为什么。。?