【问题标题】:Does inheritance across packages is possible? Also, how do we compile them?是否可以跨包继承?另外,我们如何编译它们?
【发布时间】:2016-07-22 19:08:25
【问题描述】:

上下文:来自不同包的两个类(第二个包中的第二个类继承第一个包中的类)通过继承连接并从父类对子类进行方法调用。

我做了什么:

在两个不同的记事本文件中编写了两个类,并尝试一个接一个地执行,但我无法执行并显示错误消息,我的类如下:

package first;

import second.Sample1;

public class Sample {

public static void main(String a[])
{
    Sample1 s=new Sample1();
    s.dis(1);
}


package second;

import first.Sample;

public class Sample1 extends Sample{
public void dis(int i)
{
System.out.println(i);
}
}

在 Eclipse 中,它给出的输出为 1,但我应该使用记事本文件以什么顺序执行这些代码。观察到以任何顺序编译这些类会给出错误消息。

非常感谢。 :)

【问题讨论】:

  • 你的继承没有任何事情。你期待什么?附言您需要将它们一起编译,因为它们具有循环依赖关系。
  • 在 Eclipse 中,它的输出为 1... 请阅读整个描述。谢谢。
  • 确实,System.out.println(1) 还会产生什么?我更多的是询问您希望在此示例中继承做什么。
  • 如何将它们编译在一起,因为我已经将它们写在不同的记事本文件中?
  • 这似乎很容易searchable

标签: java inheritance


【解决方案1】:

你创建了一个循环包依赖,这不是一个好主意。

您的基类Sample 不需要知道任何关于它的子类的信息,而当它知道时,这通常是糟糕设计的标志。

只需将main 方法移动到Sample1Sample 类就不必导入second.Sample1

【讨论】:

  • 然后删除Sample?这里的主要问题是,这实际上并不是以任何有意义的方式进行继承的示例。
  • @BoristheSpider 我同意正如问题中所发布的那样,Sample1 不会从Sample 继承任何状态或行为,但我对继承确实有意义的情况给出了一般性答案.
  • 我可以让 Sample1 继承 Sample 的任何状态/行为,但这不是我关心的问题。只是想知道,如何编译它们?
  • @Vishwak 一旦你打破了坏依赖,你可以先编译Sample,然后再编译Sample1
  • C:\Users\PE>javac -d . Sample.java Sample1.java C:\Users\PE>java first.Sample 1 得到了我的答案。我在开发过程中遇到了这个问题,我会尽量避免这种依赖。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 2014-01-09
  • 1970-01-01
  • 2015-02-17
相关资源
最近更新 更多