内部类分四种:
-
成员内部类
-
静态内部类
-
局部内部类
-
匿名内部类
示意图:
类的五大成员:属性、方法、构造方法、代码块、内部类
内部类: 在一个类的里面,再定义一个类。
举例:在 A 类的内部定义 B 类,B 类就被称为内部类。
public class Outer { // 外部类
public class Inner { // 内部类
}
}
既不是外部类也不是内部类的类统称为外部其他类。
可以在外部其他类中创建内部类的对象, 并调用它的方法.
内部类表示的事物是外部类的一部分。
内部类单独出现没有任何意义。
例如:
需求: 写一个 Javabean 类描述汽车。
属性: 汽车的品牌, 车龄, 颜色, 发动机的品牌, 使用年限。
可以定义一个车类:
但是还不是太好,因为发动机是一个独立的个体,和车还是有点区别的,所以和发动机相关的属性,不应该和车定义在一起。于是可以将发动机的属性拿出来,再定义一个发动机类:
但是这样还是不是太好,因为发动机如果单独出现,是没有什么实际意义的。所以最好的解决方案就是把发动机这个类定义在车这个类的里面:
内部类的访问特点:
-
内部类可以直接访问外部类的成员,包括私有。
-
外部类要访问内部类的成员,必须创建对象,外部类不能直接访问内部类的成员。
什么时候用到内部类: 如果 B 类表示的事物是 A 类的一部分, 且 B 类单独存在没有意义, 那么就可以将 B 类设计为 A 类的内部类. 例如汽车的发动机, 人的心脏, ArrayList 的迭代器.
程序示例:
package InnerClass;
public class Car {
String carname;
private int age;
String carColor;
public void show() {
System.out.println(carColor); // 外部类的成员方法中,获取外部类的成员变量,没有任何问题
// System.out.println(engineAge); // 报错。外部类要访问内部类的成员,必须创建对象。
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); // 内部类可以直接访问外部类的成员,包括私有。
System.out.println(age); // 内部类可以直接访问外部类的成员,包括私有。
}
}
}
标签:部类,内部,成员,System,println,out
From: https://www.cnblogs.com/Chengkai730/p/18409159