一、内部类
内部类简介:
概念:在一个类内部再定义一个完整的类。
一般情况下类与类之间是相互独立的,内部类的意思就是打破这种独立思想,让一个类成为另一个类的内部信息,和成员变量、成员方法同等级别。
- 内部类的好处:
- 采用内部类这种技术,可以隐藏实现细节和内部结构,封装性更好,让程序的结构更加合理!如果类很多且都暴露在外面,那么类与类之间的调用就会十分繁琐!
1.成员内部类(非静态内部类)
Demo 代码示例:
// 外部类
public class OuterClass {
//成员变量
private String OuterName; // 没赋值,默认为null
//成员方法
public void OuterDisplay(){
System.out.println("这是外部类方法!");
System.out.println(OuterName);
}
//内部类,在外部类的里面定义
public class InnerClass{
//成员变量
private String InnerNme;
//构造方法
public InnerClass() {
InnerNme = "Inner Class"; // 给内部类成员变量赋值
}
//成员方法
public void InnerDisplay(){
System.out.println("这是内部类方法!");
System.out.println(InnerNme);
}
}
// 主方法
public static void main(String[] args) {
//创建外部类的类对象
OuterClass outerClass = new OuterClass();
//通过外部类类对象调用外部类的成员方法
outerClass.OuterDisplay();//这是外部类方法! null
// 这个类是内部类,已经不是独立的类了,因此不能像外部类一样直接创建!
//InnerClass innerClass = new InnerClass(); 行不通
//外部类.内部类 内部类对象名 = 外部类对象.new 内部类构造方法();用外部类.内部类的形式创建对象便可以了
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
innerClass.InnerDisplay();// 这是内部类方法! Inner Class
}
}
输出结果:
这是外部类方法!
null
这是内部类方法!
Inner Class
总结:成员内部类(非静态内部类)的使用就是将内部类作为外部类的一个成员变量/成员方法来使用,所以必须依赖于外部类的对象才能调用,用法和成员变量/成员方法一致!
2.局部内部类
- 局部内部类:基本的内部类还可以在一个方法体中定义。
Demo 代码示例:
public class OuterClass {
//成员变量
private String OuterName;
//成员方法
public void display(){
class InnerClass {
public void print(){
System.out.println("这是一个局部内部类方法!");
}
}
InnerClass innerClass = new InnerClass();
innerClass.print();
}
// 主方法
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
outerClass.display();
}
}
3.静态内部类
- 静态内部类的构造不需要依赖于外部类对象,类中的静态组件都不需要依赖于任何对象,可以直接通过类本身进行构造。
Demo 代码示例:
package NeiBuLei;
public class OuterClass {
//成员变量
private String OuterName;
//成员方法
public void display(){
System.out.println("这是外部类方法!");
System.out.println(OuterName);
}
//静态内部类
public static class InnerClass{
private String InnerName;
public InnerClass() {
InnerName = "Inner Class";
}
//成员方法
public void display(){
System.out.println("这是静态内部类方法!");
System.out.println(InnerName);
}
}
// 主方法
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
outerClass.display();
// 静态内部类的构造不依赖与外部类,可以直接通过类本身进行构造!
InnerClass innerClass = new InnerClass();
innerClass.display();
}
}
输出结果:
这是外部类方法!
null
这是静态内部类方法!
Inner Class