2013-11-27 38 views
2

我想创建一个子类的对象,它不是主要的静态,但不能做到。有人尝试过吗?如何在java中创建子类的对象?

package com.example; 

import com.example.SubClassExample.MainClass.SubClass; 

public class SubClassExample { 

    static class MainClass { 
     public int mca; 
     protected int mcb; 
     private int mcc; 

     SubClass sc = new SubClass(); 

     public class SubClass { 
      public int sca; 
      protected int scb; 
      private int scc; 

      void method() { 
       mca = 10; 
       mcb = 20; 
       mcc = 30; 

       sca = 10; 
       scb = 20; 
       scc = 30; 

       System.out.println("Subclass: " + mca + " " + mcb + " " + mcc + " "); 
       System.out.println("Subclass: " + sca + " " + scb + " " + scc + " "); 
      } 

     } 

     void method() { 
      mca = 100; 
      mcb = 200; 
      mcc = 300; 

      sc.sca = 100; 
      sc.scb = 200; 
      sc.scc = 300; 

      System.out.println("MainClass: " + mca + " " + mcb + " " + mcc + " "); 
      System.out.println("MainClass: " + sc.sca + " " + sc.scb + " " + sc.scc + " "); 
     } 
    } 

    public static void main(String[] args) { 

     MainClass obj = new MainClass(); 
     obj.method(); 
     obj.sc.method(); 

     SubClass obj1 = new obj.SubClass(); //Getting ERROR here, tried so many like 
        //MainClass.clas.SubClass, obj.class.SubClass, Subclass() but still not able 
        //to do. As it is a public subclass, cant we able to create an object of 
        //that class 
     obj1.method(); 
    } 

} 

回答

2
Subclass instance = new MainClass().new SubClass(); 

或在您的情况

Subclass instance = obj.new SubClass(); 

您需要的父类的实例来创建内部非静态类的实例。

+0

在上面的代码中obj已经是MainClass()的实例,但仍然无法做到,任何原因? – Suman

+0

谢谢了吧:),SubClass obj1 = obj.new SubClass(); – Suman

+0

没问题。乐意效劳 –

1
SubClass obj1 = new obj.SubClass(); //Getting ERROR here, tried so many like 

你不能把一个newobj前:实例MyClass。它实际上没有意义。这是因为内部类的对象静静地连接到外部类的对象。声明obj.new InnerClass()具有与obj.innerInstance相同的等同含义:通过外部类的实例引用新的内部实例。

这就是为什么,这条线应该是:SubClass obj1 = obj.new SubClass();

1

由于​​也不是一成不变的,所以你需要创建新的实例。

MainClass obj = new MainClass(); 
SubClass obj1 = obj.new SubClass();