首页 > 编程知识 正文

静态内部类和内部类的区别,json嵌套一个对象一个内部类

时间:2023-05-03 20:32:34 阅读:11463 作者:197

一.什么是嵌套类和内部类

可以在一个类内部定义另一个类。 该类称为“嵌套类”(nested classes ),有两种类型:静态嵌套类和非静态嵌套类。 很少使用静态嵌套类,最重要的是非静态嵌套类,即称为内部类(inner )。 嵌套类是从JDK1.1引入的。 inner类分为以下三类:

其一,由一个类(外部类)直接定义的内部类

其二,由一种方法(外部类方法)定义的内部类

其三,匿名内部类。

接下来,我们将讨论这些嵌套类的使用和注意事项。

二.静态嵌套类

以下代码定义静态嵌套类。

公共类静态测试{

私有状态名称=' Java John ';

私有字符串id=' x001 ';

静态类人员{

私有字符串地址=' swjtu,chenDu,China ';

公共字符串邮件=' josserchai @ Yahoo.com '; //内部类的公共成员

公共语音显示(

//system.out.println(id; //无法直接访问外部类的非静态成员

system.out.println(name; //只能直接访问外部类的静态成员

system.out.println (inner ' address; //访问本内部类的成员。

}

}

公共语音打印机(

人员人员=新人员(;

person.display (;

//system.out.println(mail ); //无法访问

//system.out.println(address ); //无法访问

系统. out.println (person.address; //可以访问内部类的私有成员

系统. out.println (person.mail; //可以访问内部类的公共成员

}

publicstaticvoidmain (字符串[ ] args ) {

staticteststatictest=newstatictest (;

staticTest.printInfo (;

}

}

在静态嵌套类内部,无法访问外部类的非静态成员。 这受Java语法的“静态方法无法直接访问非静态成员”限制。 要访问外部类的变量,必须用其他方法解决。 因此,很少使用静态嵌套类。 请注意,外部类访问内部类的成员是特殊的,不能直接访问,但静态嵌套中的所有成员和方法默认为静态的,因此可以从内部类访问。 另外,请注意,内部静态类Person仅在类StaticTest的范围内显示,在其他类中引用或初始化时会出错。

三.在外部类中定义内部类

以下代码在外部类中定义两个内部类及其调用关系。

公共类输出器{

int outer_x=100;

类inner {

公共int y=10;

私密int z=9;

int m=5;

公共语音显示(

system.out.println (display outer_x : ) outer _ x );

}

私密void显示2 (

system.out.println (display outer_x : ) outer _ x );

}

}

voidtest(}

Inner inner=new Inner (;

inner.display (;

inner.display2(;

//system.out.println (innery : ) y ); //无法访问内部变量

system.out.println(innery: ) inner.y ); //可以访问

system.out.println(innerz: ) inner.z ); //可以访问

system.out.println(innerm: ) inner.m ); //可以访问

InnerTwo innerTwo=new InnerTwo (;

innerTwo.show (;

}

class InnerTwo{

Inner innerx=new Inner (;

公共void show () }

//system.out.println(y; 无法访问Innter的y成员

//system.out.println(inner.y ); 不要直接访问Inner成员和方法

innerx.display (; //可以访问

innerx.display2(; //可以访问

系统. out.println (innerx.y; //可以访问

system.out.println(innerx.z; //可以访问

系统. out.println (innerx.m; //可以访问

}

}

publicstaticvoidmain (string args [ ] ) {

Outer outer=new Outer (;

outer.test (;

}

}

需要对上述代码进行说明。 对于内部类,通常在定义类的class关键字之前不使用public或private等修饰符。 如果添加也不会产生任何影响,同时这些修饰符似乎也不会影响内部类的变量或方法(请参见。 另外,请注意,内部类Inner和InnterTwo仅在类Outer的范围内是已知的,如果非类Outer代码尝试初始化或使用类Inner,则编译不会通过。 此外,内部类的变量成员只能在内部查看,如果需要访问外部类或同一层次的内部类,则必须采用示例程序方法,而不能直接访问内部类的变量。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。