使用来自同一超类的另一个子类的数据的Java子类
我创建了3个类,一个超类“a”,在a下创建了两个子类“b”和“c”。我正在创建一个c的实例,给它一个整数“n”,然后使用子类b进行一些计算。我遇到的问题是,当我创建一个实例c来调用b时,数据在技术上属于超类a/c,对吗?所以当我用
b_实例=新的b()
在c的实例中, 我调用的b calc()函数将返回0。我猜这是因为b有自己的数据生态圈
我该怎么做
(二)
另外,如何调用同名的超类函数
谢谢
public class prog
{
public static void main(String args[])
{
c c1 = new c();
c1.run();
}
}
class a
{
private int number;
void set_number(int n)
{
number = n;
}
int get_number()
{
return number;
}
int calc()
{
return number*2;
}
}
class b extends a
{
int calc()
{
// calling the superclass function calc, then subtract
return super.calc() - get_number();
}
}
class c extends a
{
void run()
{
set_number(1);
b b1 = new b();
System.out.println(b1.calc());
}
}
无限循环问题
public class prog
{
public static void main(String args[])
{
c c1 = new c();
c1.run();
}
}
class a
{
void calc_a()
{
System.out.println("") ;
}
void calc_b()
{
calc_a(); // meaning the calc_a() in the superclass
}
}
class b extends a
{
void calc_a()
{
super.calc_b();
}
}
class c extends a
{
void run()
{
b b1 = new b();
b1.calc_b();
}
}
# 1 楼答案
有几种可能的方法。我考虑从^ {< CD2> }中扩展^ {< CD1> },这样^ {< CD1> }获得^ { CD4}}和^ {CD2}}的所有功能,例如…
但是,如果这是不可行的(出于某种原因),那么您需要将
c
必须传递给b
的值,类似于话虽如此,我还是觉得这“有味道”。从
a
扩展到c
可以执行b
有什么意义?这会给我敲响警钟问题是,如果你调用
c#calc
,它只会转到a
的calc
方法。。。基于run
,这似乎不是你想要实现的,所以这一切都是一团糟因为直接调用
calc
会导致StackOverflowError
,因为你一直在调用自己在本例中,您正在执行
a
正在执行的操作并对其进行修改。这是OO语言中的常见做法旁注
Java(以及Java社区)已经有了一套定义良好的编码实践。你应该花时间去学习它们,这将使你的代码更容易阅读,也使你更容易阅读其他人的代码
从Code Conventions for the Java TM Programming Language开始
类名应该以大写字母开头,方法在
camelCase
中,例如更新
你需要问自己的问题是,为什么
b
需要覆盖calc_a
?为什么不重写calc_b
?这将解决这个问题