成员内部类可以访问外部类的静态成员,实例方法中 可以访问外部类的实例成员
在内部类定义的方法中要访问外部类对象成员:外部类名.this.当前成员名
调用成员内部类:
package com.itheima.d6_innerclass;
public class Test {
public static void main(String[] args) {
// 成员内部类是属于外部类对象的(所以创建的时候先new外部类构造器.new内部类构造器)
// 格式:外部类名.内部类名 对象名 = new 外部类构造器().new 内部类构造器()
Outer.Inner in = new Outer().new Inner();
in.setName("lxc");
in.show();
// 成员内部类的静态方法调用,要用:外部类名.内部类名.静态方法名
Outer.Inner.test();
// 用有参构造器创建对象(这样就可以直接给成员变量赋值)
Outer.Inner in1 = new Outer("爱听课").new Inner();
in1.show();
}
}
定义成员内部类
package com.itheima.d6_innerclass;
/**
* 外部类
*/
public class Outer {
// 在外部类定义静态成员变量,让成员内部类直接访问
// 因为外部类的静态成员是只有一份且可以被共享
public static int num = 111;
// 定义一个实例成员,让成员内部类直接访问
// 因为必须先有外部类对象,才能有成员内部类对象,
// 所以可以直接访问外部类对象的实例成员
private String hobby;
public Outer() {
}
public Outer(String hobby) {
this.hobby = hobby;
}
/**
* 成员内部类:不能加static修饰 属于外部类对象的,所以JDK16之前(16支持)不支持静态成员(静态成员是属于类的)
*/
public class Inner{ // 成员内部类相当于静态内部类区别就是没有static修饰
private String name;
private int age;
public static int a = 100; // JDK 16开始,成员内部类开始支持静态成员了 JDK16之前不支持
public static void test(){// 成员内部类的静态方法
System.out.println(a);
}
public void show(){
System.out.println("名称:" + name);
System.out.println("数量:" + num);
System.out.println("爱好" + hobby); // 这里访问的是外部成员变量
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}