我在想。当我有两个类而第二个类metalRobot
扩展第一个类robot
时,是否有一种方法可以在第二个方法中调用第一个类的方法来覆盖它?
示例
//super class
class robot{
private int width;
private int height;
//constructor
robot(int width,int height){
this.width=height;
this.width=height;
}
//display width and height
void render()
{
System.out.println(width + " " + height);
}
}
//child class
class metalRobot{
private int x;
private int y;
//constructor
metalRobot(int x,int y, int height, int width){
super(width,height);
this.x=x;
this.y=y;
}
@Override
void render()
{
System.out.println(x + " " + y);
}
}
因此,当我调用渲染时,它将打印出x,y宽度和高度
答案 0 :(得分:3)
在metalRobot的第一行render()上调用super.render()。
其他信息:https://docs.oracle.com/javase/tutorial/java/IandI/super.html
答案 1 :(得分:2)
首先,你需要继承robot
:
class metalRobot extends robot {
}
然后,您可以通过关键字super
访问父方法:
@Override
void render() {
super.render();
System.out.println(width + " " + height);
}
答案 2 :(得分:1)
调用super.render()
是一种解决方案。另一个解决方案,也就是我个人更喜欢的解决方案,是使用the decorator pattern。它需要一个额外的界面,但它可以让你的班级用户更好地控制他们如何组成一个复合对象。
interface Robot
{
void render();
}
class DefaultRobot implements Robot
{
public void render()
{
//do some stuff
}
}
class MetalRobot implements Robot
{
private final Robot wrapped;
public MetalRobot(Robot robot)
{
this.wrapped = robot;
}
public void render()
{
wrapped.render();
// do some extra stuff
}
}
示例用法可能类似于:
Robot robot = new MetalRobot(new DefaultRobot());
假设您稍后要添加FatRobot
和RedRobot
:
// metal, fat, red robot
Robot robot = new MetalRobot(new FatRobot(new RedRobot(new DefaultRobot())));
// fat and red robot
Robot robot2 = new FatRobot(new RedRobot(new DefaultRobot()));
// red, metal robot
Robot robot3 = new RedRobot(new MetalRobot(new DefaultRobot()));
或者你能想象的任何其他组合。多态性不允许您以优雅的方式执行此操作。
答案 3 :(得分:0)
要调用超类的overriden方法,必须使用if (cell==null)
{
continue;
}
关键字后跟一个点,然后是方法名称。
e.g。 super
请注意,super.render()
仅允许在子类的非静态方法中使用。
如果
中有构造函数,也可以在构造函数中使用super
不是默认构造函数的父类,您必须提供所需的
通过子类构造函数
在超类构造函数中的参数 e.g。如果您的超类具有super
并且不包含默认构造函数
您必须为超类构造函数提供值,才能使用MySuperclass(String myString)
关键字
super
另请注意,java中不允许多重继承,因此您不能多次MySubclass()
{
super("Needed String");
}
,例如2次或更多
<强>为什么吗
因为孩子班级不知道哪个extends
是哪个以及许多其他原因导致 James Gosling 不允许这样做
答案 4 :(得分:0)
使用 super.render()访问父类的方法