Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 内部类与构造函数_Java_Constructor_Inner Classes - Fatal编程技术网

Java 内部类与构造函数

Java 内部类与构造函数,java,constructor,inner-classes,Java,Constructor,Inner Classes,我想创建一个类,它将具有相同的内部类,更具体地说,如下所示: class PassengerComponent extends PlaneComponent { PassengerComponent InnerPC ; int inner ; // checks if PassengerComponent has an inner class Passenger组件继承自: class PlaneComponent { String Description ; } 问

我想创建一个类,它将具有相同的内部类,更具体地说,如下所示:

class PassengerComponent extends PlaneComponent
{   
   PassengerComponent InnerPC ;
   int inner ; // checks if PassengerComponent has an inner class
Passenger组件继承自:

class PlaneComponent
{
   String Description ;
}
问题是内部类应该随机填充,这意味着 有时乘客部件会有一个内部部件,有时则没有! 我尝试这样做的方式如下:

        int random = (int )(Math.random() * 1 + 0 );
        if( random == 0)
        {
           PassengerComponent PC1 = new PassengerComponent("Passenger Component #1" , 0);    
        }
        else
        {
           PassengerComponent PC1 = new PassengerComponent("Passenger Component #1" , 1); 
        }

       PC1.ready_check(Sc, Cg);
    public PassengerComponent( String D , int i)
    {
      Description = D ;
      System.out.println( " PassengerComponent: " + Description + " Has Been Created ");
      switch (i) {
        case 0:
            InnerPC = new PassengerComponent( " Inner Passenger Component #1 " , 2 );
            inner = 1 ;
            break;
        case 1:
            inner = 0 ;
            break ;
        case 2:
            break;
        default:
            break;
       }
    }
  }
而乘客构造如下所示:

        int random = (int )(Math.random() * 1 + 0 );
        if( random == 0)
        {
           PassengerComponent PC1 = new PassengerComponent("Passenger Component #1" , 0);    
        }
        else
        {
           PassengerComponent PC1 = new PassengerComponent("Passenger Component #1" , 1); 
        }

       PC1.ready_check(Sc, Cg);
    public PassengerComponent( String D , int i)
    {
      Description = D ;
      System.out.println( " PassengerComponent: " + Description + " Has Been Created ");
      switch (i) {
        case 0:
            InnerPC = new PassengerComponent( " Inner Passenger Component #1 " , 2 );
            inner = 1 ;
            break;
        case 1:
            inner = 0 ;
            break ;
        case 2:
            break;
        default:
            break;
       }
    }
  }
构造函数被调用,输出消息似乎正常,但当调用PC1.ready\u check时,编译器找不到我创建的PC1!(准备就绪\u检查对任何想知道的人都没有任何问题)


很抱歉问了这么长的问题,有什么想法吗?

它与内部类或
PassengerComponent
无关,只与可变范围有关

由于
PC1
if/else
块内声明为,因此它仅在该块内已知

如果要在
If/else
块之后使用
PC1
,请将其声明为高于一级:

int random = (int )(Math.random() * 1 + 0 );
PassengerComponent PC1;
if( random == 0)
{
    PC1 = new PassengerComponent("Passenger Component #1" , 0);    
}
else
{
    PC1 = new PassengerComponent("Passenger Component #1" , 1); 
}

PC1.ready_check(Sc, Cg);

为什么要用幻数(0和1)来表示它是否有一个内部变量?在本例中,它是二进制的,因此布尔值
hasInner
很好,但出于类型安全性和可扩展性,我仍然更喜欢枚举。另外,当我们在做这件事的时候,让我们把switch语句改成Maps。@SocialProgrammer如果它解决了你的问题,别忘了接受这个答案。