概念:在一个类的内部再定义一个完整的类。
1,成员内部类
- 在类的内部定义与实例变量,方法同级别。
- 是外部类的一个实例部分,创建内部类对象时,一定要依赖于外部类。
- 编写一个内部类Outer,在Outer内编写一个内部类Inner
package innerclass.memberinnerclass; public class Outer { private String name = "张三"; private String sex = "男"; public class Inner{ private String name = "李四"; private int age = 18; /* 在内部类可以直接输出内部类的参数,但当参数名相同时,优先输出内部类,输出外部类要 用"外部类名.this.参数名" */ public void run(){ System.out.println(name);//输出 李四 也可用"this.name" System.out.println(sex);//输出 男 System.out.println(age);//输出 18 //输出 张三 与外部类名相同要用"Outer.this.name" System.out.println(Outer.this.name); } } }
- 编写一个测试类Test
public class Test { //内部类是外部类的一个实例部分,创建内部类对象一定要依赖内部类 public static void main(String[] args) { //创建外部类对象 Outer outer = new Outer(); //通过外部类创建内部类对象 Outer.Inner inner = outer.new Inner(); //调用内部类方法 inner.run(); } }
- 输出
- 注意
1,innerclass.memberinnerclass.Outer.Inner' is not public in 'innerclass.memberinnerclass.Outer'. Cannot be accessed from outside package
外部类Inner在“innerclass.memberinnerclass.Outer”中不是公共的。无法从包外部访问,定义内部类是加一个修饰属性”public“,定义为公共的。
2,内部类不能定义静态成员(static),但可以定义静态常量。非static的内部类,在外部类加载的时候,并不会加载它,所以它里面不能有静态变量或者静态方法。