前言
需求来源是我需要封装一个对象进行传参,但是我又不想通过创建多个类的方式进行嵌套,于是便想到内部类的方式。一下是我想实现的问题,当然实际上ShippingMessage类也是Order类的一个属性。
@Data
public class ShippingMessage extends Shipping {
private String time;
private String address;
private Contact contact;
@Data
public class Contact{
private String name;
private String phone;
}
}
最终形成如下图所示的结构参数:
举例说明
# 生成含有内部类的Animal
public class Animal {
public Cat cat;
public class Cat {
private String name;
private String color;
public void setName(String name) {
this.name = name;
}
public void setColor(String color) {
this.color = color;
}
public String getName() {
return name;
}
public String getColor() {
return color;
}
}
}
# 调用上面含有内部类的类进行属性类操作
Animal animal = new Animal(); // 创建外部类的实例
animal.cat = animal.new Cat(); // 使用外部类实例创建内部类的实例,并赋值给 Cat 属性
animal.cat.setName("Tom"); // 给 Cat 的属性赋值
animal.cat.setColor("Gray");
System.out.println("Cat name: " + animal.cat.getName());
System.out.println("Cat color: " + animal.cat.getColor());
注意
在用内部类的时候需要考虑类的隔离级别:
在Java中,有四种访问修饰符(隔离级别)用于控制类、方法、变量以及内部类的访问权限:private、public、默认(无修饰符)和protected。
-
private:最严格的访问级别。private修饰的成员只能在当前类中直接访问,其他类无法直接访问。这种访问级别用于封装类的内部实现细节,防止外部代码直接访问和修改。
-
public:最宽松的访问级别。public修饰的成员可以被任何类访问,包括外部类和不同包中的类。这种访问级别用于公开类的接口和功能。
-
默认(无修饰符):如果没有使用任何修饰符,即默认访问级别。默认访问级别在同一包中可见,但对于不同包中的类则不可见。这种访问级别用于控制包内部的访问。
-
protected:介于private和默认访问级别之间。protected修饰的成员在同一包中可见,不同包中的子类也可以访问。这种访问级别用于实现类继承和子类对父类的访问。