jju*_*uma 5 java inheritance api-design
我有一个包
public abstract class Player { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
还有这些
public abstract class GamePlayer extends Player { /*...*/ }
public abstract class TournamentPlayer extends Player { /*...*/ }
public abstract class StatelessPlayer extends Player { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
该软件包的用户需要玩家,但为了在不破坏它的情况下使用该软件包,我要求他们永远不要直接扩展播放器.相反,他们应该扩展提供的子类之一.
问题:我应该如何阻止用户直接扩展播放器?
我正在寻找一种能明显禁止这种禁令的方法.
Jon*_*eet 18
使构造函数Player仅具有包访问权限.然后他们将无法调用构造函数或自己扩展它.如果你不已经有在明确的构造函数Player,创建一个(否则编译器会创建一个默认的公共参数构造函数).
(请注意,我只建议对构造函数执行此操作.类本身可以是公共的,以便客户端仍然可以使用它.)
这是有效的,因为任何构造函数(除了in java.lang.Object)都必须调用超类构造函数(显式或隐式).如果没有可访问的构造函数,则无法创建子类.
确保Player的构造函数不公开:
public abstract class Player {
Player() {
// initialization goes here
}
}
Run Code Online (Sandbox Code Playgroud)
然后类可以从同一个包中扩展Player,但不能从包外部扩展.
| 归档时间: |
|
| 查看次数: |
1947 次 |
| 最近记录: |