亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

精通 Java 嵌套类与内部类:类型、示例与最佳实践

Java 嵌套类与内部类

探索 Java 嵌套类如何增强封装、提升可读性,并启用强大的内部类模式。

Java 中可在类内部声明另一个类 —— 称为 嵌套类。例如:

class OuterClass { // ... class NestedClass { // ... } }

嵌套类主要有两种形式:

推荐阅读:

非静态嵌套类(内部类)

内部类驻留在外部类内,可自由访问外部类成员(甚至私有成员)。因其绑定外部类实例,必须先实例化外部类。

示例 1:内部类

class CPU { double price; // 内部类 class Processor{ double cores; String manufacturer; double getCache(){ return 4.3; } } // protected 内部类 protected class RAM{ double memory; String manufacturer; double getClockSpeed(){ return 5.5; } } } public class Main { public static void main(String[] args) { CPU cpu = new CPU(); CPU.Processor processor = cpu.new Processor(); CPU.RAM ram = cpu.new RAM(); System.out.println("Processor Cache = " + processor.getCache()); System.out.println("Ram Clock speed = " + ram.getClockSpeed()); } }

输出:

Processor Cache = 4.3 Ram Clock speed = 5.5

此处 Processor 和 RAM 嵌套在 CPU 内。RAM 声明为 protected,演示内部类可使用任意 Java 访问修饰符。

在 Main 中,先实例化外部类 CPU,再通过外部实例创建内部类实例:

CPU.Processor processor = cpu.new Processor; CPU.RAM ram = cpu.new RAM();

提示:点(.)运算符用于将内部类实例绑定到其外部实例。

从内部类访问外部类成员

内部类可通过外部类名加 this 关键字引用外部类成员,如 Car.this.carType。当内部类有自己的 this 上下文时,此语法是必要的。

示例 2:与外部类交互

class Car { String carName; String carType; public Car(String name, String type) { this.carName = name; this.carType = type; } private String getCarName() { return this.carName; } // 内部类 class Engine { String engineType; void setEngine() { if(Car.this.carType.equals("4WD")){ if(Car.this.getCarName().equals("Crysler")) { this.engineType = "Smaller"; } else { this.engineType = "Bigger"; } } else { this.engineType = "Bigger"; } } String getEngineType(){ return this.engineType; } } } public class Main { public static void main(String[] args) { Car car1 = new Car("Mazda", "8WD"); Car.Engine engine = car1.new Engine(); engine.setEngine(); System.out.println("Engine Type for 8WD= " + engine.getEngineType()); Car car2 = new Car("Crysler", "4WD"); Car.Engine c2engine = car2.new Engine(); c2engine.setEngine(); System.out.println("Engine Type for 4WD = " + c2engine.getEngineType()); } }

输出:

Engine Type for 8WD= Bigger Engine Type for 4WD = Smaller

尽管 getCarName() 是 private,内部类仍可调用,因为它位于同一外部类内。

静态嵌套类

静态嵌套类无需外部类实例即可创建。因此它不能直接访问外部类的非静态成员。使用外部类名创建:

OuterClass.NestedClass obj = new OuterClass.NestedClass();

示例 3:静态嵌套类

class MotherBoard { static class USB{ int usb2 = 2; int usb3 = 1; int getTotalPorts(){ return usb2 + usb3; } } } public class Main { public static void main(String[] args) { MotherBoard.USB usb = new MotherBoard.USB(); System.out.println("Total Ports = " + usb.getTotalPorts()); } }

输出:

Total Ports = 3

示例 4:在静态嵌套类中尝试访问外部成员

class MotherBoard { String model; public MotherBoard(String model) { this.model = model; } static class USB{ int usb2 = 2; int usb3 = 1; int getTotalPorts(){ if(MotherBoard.this.model.equals("MSI")) { return 4; } else { return usb2 + usb3; } } } } public class Main { public static void main(String[] args) { MotherBoard.USB usb = new MotherBoard.USB(); System.out.println("Total Ports = " + usb.getTotalPorts()); } }

运行此代码产生:

error: non-static variable this cannot be referenced from a static context

此错误因静态嵌套类无外部实例无法引用 MotherBoard.this。

关键要点

java

  1. 理解 C# 嵌套类:定义、访问与继承实战
  2. Java 变量与字面量:全面指南
  3. Java 类与对象:实用指南
  4. 深入理解 Java final 关键字:变量、方法与类的不可变性
  5. Java instanceof 运算符完全指南:用法、继承与接口检查
  6. Java 抽象类与抽象方法完全指南
  7. 深入理解 Java 静态嵌套类:用法、差异与实战示例
  8. 精通 Java 匿名内部类:定义、语法与实战示例
  9. Java 单例模式详解:安全实现与使用指南
  10. 精通 Java 反射:运行时检查类、方法与字段
  11. 掌握 Java 泛型:构建可复用、类型安全的代码
  12. 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除