内部类
类的五大成员:
属性、方法、构造方法、代码块、内部类
什么是内部类?
-
在一个类的里面,在定义一个类
-
举例:在A类的内部定义B类,B类就被称为内部类
public class Outer{ //外部类 public class Inner{ //内部类 } }
-
内部类的访问特点:
- 内部类可以直接访问外部类的成员,包括私有
- 外部类要访问内部类成员,必须创建对象
一个内部类demo
package InclassDemo1;
public class Car {
private String carName;
private int carAge;
private String carColor;
public String getCarName() {
return carName;
}
public void setCarName(String carName) {
this.carName = carName;
}
public int getCarAge() {
return carAge;
}
public void setCarAge(int carAge) {
this.carAge = carAge;
}
public String getCarColor() {
return carColor;
}
public void setCarColor(String carColor) {
this.carColor = carColor;
}
public Car(String carName, int carAge, String carColor) {
this.carName = carName;
this.carAge = carAge;
this.carColor = carColor;
}
public Car() {
}
public void show(){
System.out.println(carName);
Engine e = new Engine();
System.out.println(e.engineName);
}
class Engine{
String engineName;
int engineAge;
public void show(){
System.out.println(engineName);
System.out.println(carName);
}
}
}
内部类分类
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
成员内部类
-
写在成员位置的,属于外部类的成员.
public class Car{ String carName; int carAge; int carColor; class Engine{ String engineName; int engineAge; } }
-
成员内部类可以被一些修饰符所修饰,比如: private, 默认(空着不写), protected(本包和其他包中的子类使用), public static等
-
在成员内部类里面,JDK16之前不能定义静态变量, JDK 16才开始可以定义静态变量
创建成员内部类的对象
方式一:
在外部类中编写方法,对外提供内部类的对象
方式二:
直接创建格式: 外部类名.内部类名 对象名 = 外部类对象.内部类对象;
范例: Outer.Inner oi = new Outer().new Inner();
成员内部类如何获取外部类的成员变量
-
对于变量名字不同的,直接用即可
package InclassDemo2; public class Outer { private int a = 10; class Inner{ private int b =20; public void show (){ int c = 30; System.out.println(a);//要求打印10 System.out.println(b);//要求打印20 System.out.println(c);//要求打印30 } } }
-
对于变量名字相同的
package InclassDemo2; public class Outer { private int a = 10; class Inner{ private int a =20; public void show (){ int a = 30; System.out.println(Outer.this.a);//要求打印10 System.out.println(this.a);//要求打印20 System.out.println(a);//要求打印30 } } }
最后:欢迎大家关注我的公众号