内部类以及如何访问它们

时间:2012-08-05 05:46:07

标签: java class nested inner-classes

我有一个名为out1

的嵌套类的以下代码
 class sample{
    public int a=5;

    class out1{

        void main1(){
            System.out.println("this is out1");
        }

    }

    void call(){
        //access main1() method on class out1 
    }       

}

public class innerclass{
    public static void main(String args[]){
        sample ob=new sample();
        System.out.println(ob.a);// access field a on class sample 

        //access call() on class sample

}   
 }

有没有人知道如何访问内部类out1并且可以在不使用类示例的call()方法的情况下访问此内部类?

4 个答案:

答案 0 :(得分:1)

您可以将内部类out1对象创建为

 ob.new out1();

答案 1 :(得分:0)

这是我如何访问内部类的方法。我在类示例中创建了一个get方法,它返回类out1:

的对象
public class innerclass {

public static void main(String args[]) {
    sample ob = new sample();
    ob.getOut1().call(); // calling the call() method in innerclass out1
}
}



class sample {

public int a = 5;

out1 getOut1() {
    return new out1();
}

class out1 {

    public void main1() {
        System.out.println("this is out1");
    }

    public void call() {
        main1();
    }
}
}

尝试使用大写字母创建类,并使用camelcase,例如:Sample,InnerClass,Out1。

答案 2 :(得分:0)

内部类可以是静态的 如果没有将内部类定义为静态,则必须创建它的一个实例(一个对象)才能使用它。

以下是静态和成员(非静态)类的示例用例:

public class Tester {

    public static void main() {
        Outer outerTest = new Outer();
        outerTest.test();
        outerTest.publicInnerInstance.sayHello();
        Outer.InnerStaticClass.sayHello();
    }

}

class Outer{

    class InnerMemberClass{
        public void sayHello(){
            System.out.println("Hello");
            System.out.println("I'm an instance of 'InnerMemberClass'.");
        }
    }

    static class InnerStaticClass{
        public static void sayHello(){
            System.out.println("Hello.");
            System.out.println("I'm a static class 'InnerStaticClass'.");
        }
    }

    public InnerMemberClass publicInnerInstance;

    //'Outer' constructor
    public void Outer(){
        publicInnerInstance = new InnerMemberClass();
    }

    public void test(){
        InnerStaticClass.sayHello();
        InnerMemberClass instance = new InnerMemberClass();
        instance.sayHello();
    }
}

答案 3 :(得分:0)

你可以通过new的inner.new来访问内部类。 要从外部类调用内部类方法,您需要创建内部类的对象。否则,您必须使内部类和方法静态。

class Sample{
public int a=5;

class Out1{

    void main1(){
        System.out.println("this is out1");
    }

}

void call(){
    new Out1().main1();
}       

}

public class Innerclass{
public static void main(String args[]){
    Sample ob=new Sample();
    System.out.println(ob.a);// access field a on class sample
    Sample.Out1 out1=new Sample().new Out1();
    Out1.main1();
    ob.call();
    //access call() on class sample

}   
}

类名应按惯例以大写字母开头。