如果一个嵌套类需要在单个方法之外仍然是可见,或者它太长,不适合放在方法内部,就应该使用成员类。

当一个嵌套类需要在单个方法之外仍然是可见,或者它太长不适合放在方法内部时,可以考虑使用成员类(成员内部类)。成员类是声明在类的内部但不是在方法内部的类,可以访问外部类的实例成员。

以下是一个示例,演示了成员类的用法。考虑一个 Team 类,其中包含一个成员类 Player,表示球队的球员。在这个例子中,Player 类是 Team 类的成员类,因为它需要访问 Team 的实例变量,而且可能在单个方法之外被其他方法调用。

public class Team {
    private String teamName;
    private int foundedYear;

    // 构造函数
    public Team(String teamName, int foundedYear) {
        this.teamName = teamName;
        this.foundedYear = foundedYear;
    }

    // Getter 方法

    public String getTeamName() {
        return teamName;
    }

    public int getFoundedYear() {
        return foundedYear;
    }

    // 成员类 Player
    public class Player {
        private String playerName;
        private int playerNumber;

        // 构造函数
        public Player(String playerName, int playerNumber) {
            this.playerName = playerName;
            this.playerNumber = playerNumber;
        }

        // Getter 方法
        public String getPlayerName() {
            return playerName;
        }

        public int getPlayerNumber() {
            return playerNumber;
        }

        // 访问外部类的方法
        public void displayPlayerInfo() {
            System.out.println("Team: " + getTeamName());
            System.out.println("Founded Year: " + getFoundedYear());
            System.out.println("Player: " + getPlayerName());
            System.out.println("Player Number: " + getPlayerNumber());
        }
    }

    // 其他 Team 类的方法...
}

在这个例子中,Player 类是 Team 类的成员类,因为它直接访问了 Team 的实例变量(teamNamefoundedYear)。displayPlayerInfo 方法演示了如何在成员类中访问外部类的实例方法和变量。

使用成员类的好处之一是,它能够更自然地表示两者之间的关系,并且在一些情况下,可以减少代码的重复性。在这个例子中,球队的球员天然地与球队相关联,因此将球员表示为球队的成员类是合适的。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-15 08:18:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-15 08:18:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-15 08:18:01       82 阅读
  4. Python语言-面向对象

    2023-12-15 08:18:01       91 阅读

热门阅读

  1. WPF中DataGrid设置默认选中行

    2023-12-15 08:18:01       57 阅读
  2. OpenCV开发:编译安装opencv

    2023-12-15 08:18:01       66 阅读
  3. 【✅面试编程题:如何用队列实现一个栈】

    2023-12-15 08:18:01       59 阅读
  4. AUTOSAR从入门到精通-中间件通信DDS(一)

    2023-12-15 08:18:01       61 阅读
  5. Ubuntu无法解析域名DNS指向127.0.0.53问题处理

    2023-12-15 08:18:01       67 阅读
  6. CAN总线协议

    2023-12-15 08:18:01       51 阅读
  7. SQL信息系统 - 客观题复习

    2023-12-15 08:18:01       53 阅读
  8. React Hooks学习指北

    2023-12-15 08:18:01       50 阅读