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如果它解决了你的问题,别忘了接受这个答案。