Tag: inheritance

Java是否支持多重inheritance?

从Java的事实来看,Java中的所有类都有一个父类作为Object 。 但是同样的Java说它不支持多重inheritance。 但这段代码意味着什么? public class A extends B { //Blah blah blah } 从上面的代码可以看出,A类扩展了B类。 现在,A类还inheritance了Object类的属性,它是B的超类。 这是不是意味着A类inheritance了B类和Object Class,这就是我们所谓的多重inheritance权? 那么现在Java支持多重inheritance ,如果没有,那么上面代码的答案是什么(显示了多重inheritance)

Java文档:从接口Xinheritance的方法的含义是什么

我必须在这里遗漏一些基本的Java术语: 类可以扩展,因此它们的方法可以由它们的子类inheritance 。 接口可以实现 。 实现类必须实现所有接口的方法 – 接口本身不实现任何东西,只声明。 那么,当我查看HashSet的文档( https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html )时,我看到了一个inheritance自的方法列表接口 java.util.Set?

java中的动态方法调度

class A{ int a=10; public void show(){ System.out.println(“Show A: “+a); } } class B extends A{ public int b=20; public void show(){ System.out.println(“Show B: “+b); } } public class DynamicMethodDispatch { public static void main(String[] args) { A aObj = new A(); aObj.show(); //output – 10 B bObj = new B(); bObj.show(); //output – 20 […]

在处理inheritance时重写equals方法

我一直在阅读在处理子类时如何最好地覆盖equals方法,在这里我发现了不少post。 他们建议使用instanceof或getClass()来实现解决方案的不同方法来比较不同子类的对象。 但是参考Effective Java,我的理解是(我是新手,所以我可能错了!)Bloch认为最终两者都有问题,“没有办法扩展可实例化的类并添加一个值组件,同时保留等于合同,除非你愿意放弃面向对象抽象的好处“。 然后建议“赞成合成而非inheritance”。 所以我正在处理这个类层次结构:AbstractClass,ConcreteClass1和ConcreteClass2。 ConcreteClass1扩展了AbstractClass,ConcreteClass2扩展了ConcreteClass1。 目前只有AbstractClass重写了equals方法。 所以在AbstractClass中: public abstract class AbstractClass { private String id; public boolean equals(Object other) { return other != null && other.getClass().equals(getClass()) && id.equals(((AbstractClass) other).id); } } 在ConcreteClass1我有: public class ConcreteClassOne extends AbstractClass { private final AbstractClass parent; public ConcreteClassOne( String anId, AbstractClass aParent ) { super( anId ); […]

Java中的方法是否有’new’修饰符?

在Java中是否有与C#的new修饰符等价的东西? 我想将它用于unit testing – 每个init()方法都应标记为final并使用@Before进行注释。 然后,jUnit执行所有这些init()方法。 我不想打扰每个init()方法的新名称,我肯定想把它们标记为final,以确保它们不会覆盖彼此(另一种模式是覆盖并调用super。来自每个init()方法的init())。

有条件地inheritance自上课

我有以下类inheritance( A是我的父类): 在某些情况下 , X和Y需要一些额外的字段和方法。 所以我基本上需要的是: 由于重复的代码,我不想扩展X和Y以使它们的子类完全相同的字段和方法。 怎么办呢? 代表唯一的解决方案是什么? 更新:真实世界的例子: 我正在从不同的文件类型导入数据: 打包my_application.core : public class ImportFile { // the “A” protected final Path path; } public class CsvImportFile extends ImportFile { // the “X” private final String delimiter; } public class FixedLengthImportFile extends ImportFile { // the “Y” // nothing new } public class XmlImportFile […]

在inheritance的情况下使用model.getClass()。getMethod的问题

我正在关注Oracle Network上的这篇文章 ,以便在开发桌面应用程序时实现MVC。 我有一个问题:我正在使用由SimpleDirectory和WildcardDirectory扩展的抽象Directory类。 其中一个模型管理器方法接受Directory作为参数: public void addDirectoryDummy(Directory d){ System.out.println(“Hello!”); } 抽象控制器使用setModelProperty来调用此方法: protected void setModelProperty(String propertyName, Object newValue) { for (AbstractModel model: registeredModels) { try { Method method = model.getClass(). getMethod(propertyName, new Class[] { newValue.getClass() } ); method.invoke(model, newValue); } catch (Exception ex) { ex.printStackTrace(); } } } 我从我的实际控制器中调用它,如下所示: public void dummy( Directory d){ setModelProperty( […]

如何避免这种NullPointerException

我正在开发一款小型街机video游戏,我期待双重缓冲来改善动画效果。 我有一个类应该绘制空白图像,另一个类应该绘制一个简单的线。 但是,我一直在应该绘制线的行上得到NullPointerException class Render extends JPanel { public int dbWidth = 500, dbHeight = 400; public Image dbImage = null; public Graphics dbg; public void gameRender() { if( dbImage == null ) dbImage = createImage( dbWidth, dbHeight ); dbg = dbImage.getGraphics(); dbg.setColor( Color.white ); dbg.fillRect( 0, 0, dbWidth, dbHeight ); } } class MC […]

并行inheritance层次结构真的是代码味道吗?

我无法弄清楚如何在实践中避免并行层次结构。 例如,考虑一个必须在不同级别创建/保存/编辑笔记的应用程序,它是一个基于java swing的应用程序。 域层次结构: AbstractNote < MonthNote < DayNote < ProductNote 只读视图层次结构(在JTabPane上显示,每个都有JTable以显示特定的注释详细信息) AbstractNotePanel < MonthNotePanel < DayNotePanel < ProductNotePanel 注释编辑器层次结构(当用户单击表行中的特定注释时显示。 AbstractNoteEditorDialog < MonthNoteEditorDialog < DayNoteEditorDialog < ProductNoteEditorDialog 我读过一种避免这种情况的方法是使用访客模式。 这里但这似乎不适用于我的情况。 我对上面的设计很满意,因为大多数常见代码都是抽象类(在那里应用模板方法模式)。 如果我必须创建一个新类型的注释,例如YearNote,那么我必须并行创建YearNotePanel和YearNoteEditorDialog,这对我来说是完全可以接受的,因为我不需要因为模板而编写很多代码。 最重要的是,我想在设计中避免代码味道。 请在上面的场景中建议我替代设计,以便我的代码仍然是模块化的。 谢谢

Java使用范围分辨率/“点”运算符“扩展”?

我在阅读一些代码时遇到过这个问题,我完全不知道它意味着什么。 我尝试使用谷歌搜索等等但我没有得到任何东西,可能是由于缺乏词汇量。 代码: public final class GeneralPath extends Path2D.Float { // code and whathaveyou } 到目前为止我所知道的: 所以我对“公共最终类ClassName extends”部分没有任何疑问,但我不明白超类指定中是否存在点/范围解析运算符。 对于初学者,我想有人会说“Java没有范围解析运算符”来澄清Java和Cpp / other-OOP语言之间的细微差别,这很好,我很高兴知道这种微妙的区别。 “private”关键字在一次hw任务中杀了我一次,我希望有人注意到Java和C中“private”之间的区别。 我很困惑,因为显然它没有引用超类的成员,因为“成员”是大写的,即使它是,但引用一个对象的成员而不仅仅是对象类本身似乎是多余的。 此外,我没有找到关于这个主题的信息,因为大多数编写java how-to的人倾向于从更简单的概念开始,比如“基本”类inheritance,所以我找不到涉及“dot”运算符的任何东西。使用“extends”关键字。 如果我使用太多技术术语,我想知道为什么他们使用点运算符“Path2D.Float”,或者至少,点运算符在这个上下文中做了什么。 太感谢了!