一、什么是成员内部类
成员内部类就是定义在外部类成员位置(属性/方法的位置)的类。成员内部类就是个成员。
二、为什么要有成员内部类
使用场景:除了它的外部类,不会被其他类使用,就可以使用成员内部类。有两种情况:1.不可能有其他类使用该内部类。2.该内部类不能被其他类所使用。
三、特点
成员内部类---访问--->外部类:
- 成员内部类可以直接访问外部类的所有成员,包括私有的。
- 成员内部类可以添加任意访问修饰符(public, protected, default, private),因为成员内部类的地位就是一个成员。
- 成员内部类的作用域就是它的外部类整个类体,因为成员内部类就是个成员。
外部类---访问--->成员内部类:
- 如果外部类的方法想访问成员内部类,要在外部类的方法中先创建成员内部类的对象,再访问。
外部其他类---访问--->成员内部类:(两种方法,看下面代码即可)
package com.hspedu.innerClass;
public class memberInnerClass {
public static void main(String[] args) {
//1.第一种方式:用外部类的实例
Outer08 outer08 = new Outer08();
//outer08.new Inner08();相当于把new Inner08()当作是outer08成员
//这就只是个语法,不用纠结
Outer08.Inner08 inner08 = outer08.new Inner08();
inner08.say();
//2.第二种方式:在外部类中,编写一个方法,可以返回Inner08对象。其实和第一种方式一样,第二种有点画蛇添足的感觉
Outer08.Inner08 inner08Instance = outer08.getInner08Instance();
inner08Instance.say();
outer08.t1();
}
}
class Outer08{ //外部类
private int n1 = 10;
public String name = "张三";
//1.成员内部类是定义在外部类的成员位置上
//2.成员内部类可以直接访问外部类的所有成员,包括私有的
//3.成员内部类可以添加任意访问修饰符(public, protected, default, private),
// 因为成员内部类的地位就是一个成员。
public class Inner08{ //成员内部类
public double sal = 99.9;
public void say(){
System.out.println("n1= " + n1 + "name= " + name);
}
}
//该方法返回一个Inner08实例
public Inner08 getInner08Instance(){
return new Inner08();
}
//写方法
public void t1(){
//使用成员内部类
//创建成员内部类的对象,然后使用相关的方法
Inner08 inner08 = new Inner08();
inner08.say();
System.out.println(inner08.sal);
}
}
如果外部类和内部类的成员重名时,内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问: