在java中遇到子类问题
我在复习课本上的一个问题,我有点困惑。代码是:在java中遇到子类问题,java,class,subclass,Java,Class,Subclass,我在复习课本上的一个问题,我有点困惑。代码是: 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
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;
}
问题是:
a。编写覆盖它的DClass的print方法的定义
b。编写类DClass的方法集的定义
对于一个例子,我说将以下内容放入子类将是一个成功的覆盖,这对吗
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;
}
下面是正确的。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);
}
用于在父类中调用print的实现。如果调用前面没有super.
,它将调用派生类的同一个print方法,该方法将再次进行相同的调用,并迅速导致堆栈溢出错误
在DClass.set中,同样需要调用基类的set方法:
public void set(int a, int b)
{
super.set(a);
y = b;
}
在这里,
super.
在set
调用之前是可选的,因为唯一名为set
的方法正好接受一个参数,它在基类中,并且不被重写(仅)。但是,包括super.
更清楚。x
在基类中声明为private
。这意味着在派生类中,您无法访问它来设置它或打印它。但是,基类确实有公共方法来做这两件事。这些方法对派生类可见,因此您可以/必须使用这些方法
在DClass.print中,调用基类的print方法来打印x
:
public void print()
{
super.print();
System.out.print(" and " + y);
}
用于在父类中调用print的实现。如果调用前面没有super.
,它将调用派生类的同一个print方法,该方法将再次进行相同的调用,并迅速导致堆栈溢出错误
在DClass.set中,同样需要调用基类的set方法:
public void set(int a, int b)
{
super.set(a);
y = b;
}
在这里,
super.
在set
调用之前是可选的,因为唯一名为set
的方法正好接受一个参数,它在基类中,并且不被重写(仅)。但是,包含super.
会更清楚。任何时候如果要重写方法,请使用@override
对其进行注释。类继承其父类的可访问方法。正确,您不能直接在子类中访问x
,因为它在父类中声明为private
。我知道子类继承了其父类的可访问方法。但是我可以在子类的set方法中使用父类中的set方法吗?不清楚你在问什么。。。就好像你没试过一样。。。由于访问问题,您发布的代码无法编译。任何时候,如果要重写方法,请使用@override
对其进行注释。类继承其父类的可访问方法。正确,您不能直接在子类中访问x
,因为它在父类中声明为private
。我知道子类继承了其父类的可访问方法。但是我可以在子类的set方法中使用父类中的set方法吗?不清楚你在问什么。。。就好像你没试过一样。。。由于访问问题,您发布的代码无法编译。A也不正确;你不能在子类中直接访问x
。哦,现在这很有意义。那么我应该把X去掉吗?只要它改变了就意味着它被覆盖了,对吗?这里不需要super
。它还没有被覆盖。这个方法可以是最终的
。非常感谢,我真的很感激!真的为我澄清了。A也是不正确的;你不能在子类中直接访问x
。哦,现在这很有意义。那么我应该把X去掉吗?只要它改变了就意味着它被覆盖了,对吗?这里不需要super
。它还没有被覆盖。这个方法可以是最终的
。非常感谢,我真的很感激!真的帮我弄清楚了。谢谢你花时间!我不知道超级警察的事。真的很有帮助!谢谢你抽出时间!我不知道超级警察的事。真的很有帮助!