扩展 class 可以告诉它的超级函数使用某个 class
Can an extended class tell its super function to use a certain class
假设您有 class 代表枪和 class 代表子弹。
可以 class 扩展枪,有自己特定的扩展子弹 class 和枪超级 class 可以处理它们的数组。
在这个例子中我有两个 Gun extended classes,每个都想使用不同类型的 bullet extended class 但是让 super 处理添加到数组(以避免一堆代码重复)
伪:
class Gun{
ArrayList<Bullet> bullets;
Gun(x,y,z){
}
void shoot(){
//add bullet to bullets array
}
}
class CustomGun extends Gun{
CustomGun(x,y,z){
//do stuff
}
//want super.shoot() to add CustomBullet to bullets array
}
class CustomGunTwo extends Gun{
CustomGunTwo(x,y,z){
//do stuff
}
//want super.shoot() to add CustomBulletTwo to bullets array
}
class Bullet{
Bullet(x,y,z){
//do stuff
}
}
class CustomBullet extends Bullet{
CustomBullet(x,y,z){
super(x, y, z)
}
}
class CustomBulletTwo extends Bullet{
CustomBullet(x,y,z){
super(x, y, z)
}
}
您不能更改 superclass 中方法的行为。但是您可以覆盖它,并实现不同的行为(在 subclass 中)。需要适当地实施 superclass 才能发生这种情况。
在您的示例中,您已将 bullets
保留为 package private 访问权限,因此 CustomGunTwo
中的方法可以将自定义项目符号插入到列表中。如果 bullets
有 private 那是不可能的。
但考虑一下:
public class Gun {
private ArrayList<Bullet> bullets;
public void shoot(){
load(new Bullet());
}
protected void load(Bullet bullet) {
bullets.add(bullet);
}
}
public class CustomGun extends Gun {
@Override
public void shoot() {
load(new CustomBullet());
}
}
这里我们设计Gun
class允许子class修改加载行为。
假设您有 class 代表枪和 class 代表子弹。 可以 class 扩展枪,有自己特定的扩展子弹 class 和枪超级 class 可以处理它们的数组。
在这个例子中我有两个 Gun extended classes,每个都想使用不同类型的 bullet extended class 但是让 super 处理添加到数组(以避免一堆代码重复)
伪:
class Gun{
ArrayList<Bullet> bullets;
Gun(x,y,z){
}
void shoot(){
//add bullet to bullets array
}
}
class CustomGun extends Gun{
CustomGun(x,y,z){
//do stuff
}
//want super.shoot() to add CustomBullet to bullets array
}
class CustomGunTwo extends Gun{
CustomGunTwo(x,y,z){
//do stuff
}
//want super.shoot() to add CustomBulletTwo to bullets array
}
class Bullet{
Bullet(x,y,z){
//do stuff
}
}
class CustomBullet extends Bullet{
CustomBullet(x,y,z){
super(x, y, z)
}
}
class CustomBulletTwo extends Bullet{
CustomBullet(x,y,z){
super(x, y, z)
}
}
您不能更改 superclass 中方法的行为。但是您可以覆盖它,并实现不同的行为(在 subclass 中)。需要适当地实施 superclass 才能发生这种情况。
在您的示例中,您已将 bullets
保留为 package private 访问权限,因此 CustomGunTwo
中的方法可以将自定义项目符号插入到列表中。如果 bullets
有 private 那是不可能的。
但考虑一下:
public class Gun {
private ArrayList<Bullet> bullets;
public void shoot(){
load(new Bullet());
}
protected void load(Bullet bullet) {
bullets.add(bullet);
}
}
public class CustomGun extends Gun {
@Override
public void shoot() {
load(new CustomBullet());
}
}
这里我们设计Gun
class允许子class修改加载行为。