内部类的初步介绍
1.1 内部类的定义
当我们将一个类A放置于另一个类B的内部定义时,那么我们称A为内部类(或嵌套类),称B为外部类(或宿主类)。
1.2 内部类的主要作用
- 内部类提供了更好的封装效果,可以将内部类隐藏在外部类之内,在内部类中完成封装效果;
- 内部类成员可以直接访问外部类的私有数据,可以作为外部类的成员,一个类中的成员可以相互访问;
- 匿名内部类可以用于创建仅需要使用一次的类;
1.3 内部类与外部类的区别
- 内部类可以使用private、protected、static修饰符修饰,外部类不能;
- 非静态内部类不能有静态成员;
非静态内部类
内部类划分及非静态内部类简介
在外部类的方法中定义的类为局部内部类;
定义在外部类中的类为成员内部类,成员内部类与类中的其他成员相似,可以相互访问,成员内部类分两种,使用static修饰的内部类为静态内部类,无static修饰的内部类为非静态内部类;
非静态内部类示例
例如,我们在Cow类中定义一个ComLeg的非静态内部类,并在CowLeg类的实例方法中可以直接访问外部类Cow的private修饰的实例变量。代码如下:
public class Cow {
// 外部类的私有实例成员变量
private double weight;
// 外部类的构造器
public Cow() {}
public Cow(double weight) {
this.weight = weight;
}
// 定义非静态内部类
private class CowLeg{
// 非静态内部类的私有成员变量
private double length;
private String color;
// 非静态内部类的构造器
public CowLeg() {}
public CowLeg(double length, String color) {
this.length = length;
this.color = color;
}
// 在内部类中实现封装
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
// 在内部类中的info方法,输出信息
public void info() {
System.out.println("牛腿的颜色是:" + color + ",高为:" + length);
// 当外部类的私有成员初始化后,便可以访问外部类的私有成员
System.out.println("在内部类中查看奶牛的重