java的内部类定义以及优缺点

内部类的的作用

可以将一个类的定义放在另一个类的定义内部,这就是内部类。

三大特点:

1.封装装类型。
2.直接访问外部类成员。
3.回调。

来看下这个例子     比如,内部类声明书性的访问
class Outer {
int score = 95;

void inst() {
Inner in = new Inner();
in.display();
}

class Inner {
void display() {
System.out.println("成绩: score = " + score);
}
}
}

public class InnerClassDemo {
public static void main(String[] args) {
Outer outer = new Outer();
outer.inst();
}
}

其实使用内部类最大的优点就在于它能够非常好的解决多重继承的问题,但是如果我们不需要解决多重继承问题,那么我们自然可以使用其他的编码方式,但是使用内部类还能够为我们带来如下特性(摘自《Think in java》):

      1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。

      2、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。

      3、创建内部类对象的时刻并不依赖于外围类对象的创建。

      4、内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。

      5、内部类提供了更好的封装,除了该外围类,其他类都不能访问。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会从以下四个方面来阐述状态模式: 1. 模式特点与定义: 状态模式是一种行为型设计模式,它允许对象在其内部状态发生改变时改变它的行为。状态模式的核心思想是将对象的行为与其状态分离,将不同状态的行为封装在不同的状态类中,从而实现了状态机的概念。在状态模式中,每个状态类都实现了一个公共接口,这个接口定义了在该状态下对象所能接受的所有请求方法。当对象的状态发生改变时,它会将请求委托给当前状态对象处理,从而实现了状态的切换和行为的改变。 2. 模式应用场景: 状态模式适用于以下场景: - 对象的行为取决于其内部状态,且在运行时可以根据状态来改变对象的行为。 - 对象的状态转换比较复杂,且需要在不同状态下执行不同的操作。 - 对象的状态转换需要遵循一定的规则,如状态之间的顺序、条件等。 - 为避免使用大量的 if-else 或 switch-case 语句来处理对象的状态转换。 3. 模式案例及java代码分析: 假设有一个电梯系统,它有四种状态:停止、运行、开门、关门。在不同状态下,电梯的行为也不同。例如,在停止状态下,电梯只能接受开门和运行请求;在运行状态下,电梯只能接受停止请求等。使用状态模式可以将每个状态封装在一个状态类中,并将电梯对象的行为委托给当前状态对象处理。 下面是电梯系统的状态模式的Java代码实现: ```java // 电梯状态接口 public interface ElevatorState { // 处理电梯请求 void handleRequest(ElevatorContext context); } // 停止状态 public class StoppedState implements ElevatorState { @Override public void handleRequest(ElevatorContext context) { // 停止状态下可以接受开门和运行请求 if (context.getRequest() == ElevatorContext.Request.OPEN) { System.out.println("Opening the door..."); context.setState(new OpenedState()); } else if (context.getRequest() == ElevatorContext.Request.RUN) { System.out.println("Running..."); context.setState(new RunningState()); } } } // 运行状态 public class RunningState implements ElevatorState { @Override public void handleRequest(ElevatorContext context) { // 运行状态下可以接受停止请求 if (context.getRequest() == ElevatorContext.Request.STOP) { System.out.println("Stopping..."); context.setState(new StoppedState()); } } } // 开门状态 public class OpenedState implements ElevatorState { @Override public void handleRequest(ElevatorContext context) { // 开门状态下可以接受关门请求 if (context.getRequest() == ElevatorContext.Request.CLOSE) { System.out.println("Closing the door..."); context.setState(new StoppedState()); } } } // 电梯上下文 public class ElevatorContext { // 电梯请求枚举 public enum Request { STOP, RUN, OPEN, CLOSE } // 当前状态 private ElevatorState state; // 处理请求 public void handleRequest(Request request) { state.handleRequest(this); } // 获取请求 public Request getRequest() { // 假设请求由外部输入 return Request.RUN; } // 设置状态 public void setState(ElevatorState state) { this.state = state; } } // 客户端代码 public class Client { public static void main(String[] args) { ElevatorContext context = new ElevatorContext(); context.setState(new StoppedState()); context.handleRequest(ElevatorContext.Request.OPEN); context.handleRequest(ElevatorContext.Request.CLOSE); context.handleRequest(ElevatorContext.Request.RUN); context.handleRequest(ElevatorContext.Request.STOP); } } ``` 4. 模式优缺点: 状态模式的优点包括: - 将状态转换的逻辑封装在状态类中,便于扩展和维护。 - 将不同状态的行为分离,降低了对象之间的耦合。 - 状态转换的过程符合开放-封闭原则,可以通过添加新的状态类来扩展状态机。 状态模式的缺点包括: - 在状态比较少的情况下,状态模式会增加代码复杂度。 - 如果状态转换的规则比较复杂,状态模式可能会导致类的数量增加。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值