[英]Having trouble with Subclasses in java
我正在审阅教科书中的一个问题,我有些困惑。 代码是:
public class BClass
{
private int x;
public void set(int a)
{
x=a;
}
public void print()
{
System.out.print(x);
}
}
public class DClass extends BClass
{
private int y;
public void set(int a, int b)
{
//Postcondition: x = a; y = b;
}
问题是:
一种。 编写覆盖它的DClass打印方法的定义。
b。 编写类DClass的方法集的定义。
对于a,我是否正确地说,将以下内容放入子类将是成功的替代?
public void print()
{
System.out.print(x + " and " + y);
}
我对b也有麻烦。 因为有了后置条件,所以很明显我应该将y(子类中的实例变量)设置为b。 我面临的问题是如何将x设置为a。 因为实例变量x属于父类,这是否使其无法直接访问? 还是我被允许这样做:
public void set(int a, int b)
{
x = a;
y = b;
}
非常感谢您的帮助,谢谢!
下面是正确的。 A不正确。 我只是想说那是重写的工作方式。 我没有看这种方法的有效性。
它应该是
public void print() {
super.print();
System.out.print(" and " + y);
}
对于B,您需要调用super方法,因此
public void set(int a, int b) {
super.set(a);
y = b;
}
x
在基类中声明为private
。 这意味着在派生类中,您将无法访问它进行设置或打印。 但是,基类确实具有公共方法来完成这两种操作。 这些方法是在派生类中可见,这样你就可以/必须使用的。
在DClass.print中,调用基类的print方法来打印x
:
public void print()
{
super.print();
System.out.print(" and " + y);
}
super
关键字用于在父类中调用print的实现。 没有super.
在调用之前,它将调用派生类的相同打印方法,这将再次进行相同的调用,并由于堆栈溢出错误而迅速崩溃。
在DClass.set中,您同样需要调用基类的set方法:
public void set(int a, int b)
{
super.set(a);
y = b;
}
在这里, super.
在set
调用之前是可选的,因为唯一名为set
方法仅接受1个参数,该方法位于基类中,并且不会被覆盖(仅重载 )。 但是,包括super.
使其更清晰。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.