Tag: inheritance

当对象是Java中的接口引用时类型转换

我熟悉inheritance model type casting 。 让SuperClass and SubClass成为父类和子类; SuperClass superClass = new SubClass() ; – 这里实例化的object是subclass object ; 但它的reference type是SuperClass ; 那只是可以在subclass object上调用SuperClass那些methods ; 不能调用任何未在subclass inherited/overridden methods (即subclass任何唯一methods )。 如果SuperClass is an interface而SubClass implements it我观察到与上面相同的行为。 这只是在SuperClass interface中声明的那些方法可以在SubClass对象上调用。 我的理解是否正确? 但是通过一些casting ,我可以调用不属于接口的方法,我在下面的示例代码中观察到了这些方法; 我对我的理解做了一些评论,说明它是如何运作的; 但我想知道这是否有意义,或者我的解释是否错误; class Animals { public void bark(){ System.out.println(“animal is barking”); } } interface catIF […]

如何只实现抽象类的某些方法?

在我的具体类中,我需要实现(设置公共)抽象类的某些方法。 所以我无法扩展它,因为所有的抽象方法都是公开的。 我可以使用组合,并转发我需要的方法,但我显然需要实现抽象类。 所以,我想知道,在私有类中实现抽象类然后在父类中只转发内部类所需的方法是一种好方法吗? 例如: public class ConcreteClass{ private InnerClass inner = new InnerClass(); public String fwMethod() { return inner.method1(); } private class InnerClass extends AbstractClass { public String method1(){ …} public String method2(){ …} } } 有更好的方法吗?

设计inheritance类

我正在阅读J. Bloch的Effective Java,现在我正处于inheritance部分的设计课程中。 他描述了所谓的自用模式,据我所知,我们不能在其他可覆盖的方法中使用可覆盖的方法。 所以我的问题是如何让客户了解自我使用。 我们应该在Javadocs明确地提到它: /** * This class is self-use, thus it cannot be inherited. */ 或者我们甚至应该拒绝self-use的诱惑。 示例代码:我们是否应该如上所述记录该类,或者我们必须避免这种自我使用? public class MyClass{ public void overrideMe(){ //something ovMe(); } public void ovMe(){ //some staff } }

Java中的多重inheritance与否?

据说,Java语言只支持单inheritance。 但是,如何同时从Object和任何其他类inheritance? 这不是一个多重inheritance。 其次,我们需要inheritance所有11个Object方法? 我很难想象为什么我在I / O中需要它们,例如 最后,JDK 8将在接口中为我们提供默认方法实现,如果这可能会导致Java中的多重inheritance。 如果接口A为方法a()提供了默认实现,接口B也提供了另一个默认实现的a()方法,我们的自定义类C实现了两个接口并依赖于默认实现 – 那不是Diamond of Death吗?

Java – 向上转发和向下转发

我知道stackoverflow中有很多文章/问题描述了Java中的向上转换和向下转换。 我知道什么是向上倾斜和向下倾斜。 但我的问题并不是特别的。 上传 – 从孩子到父母的转换 – 编译器会照顾。 不需要演员表 向下转换 – 从父级转换为子级 – 需要显式转换 public class Animal { public void getAnimalName(){ System.out.println(“Parent Animal”); } } public class Dog extends Animal{ public void getDogName(){ System.out.println(“Dog”); } } public static void main(String[] args) { Dog d = new Dog(); Animal a = d; // Upcasting a.getAnimalName(); Animal […]

jersey中的注释inheritance

我正在创建一些具有相同forms的资源类,所以一个好主意是使用DRY并使用inheritance。 所以我创建了一个RootResource类并在那里放了一些方法。 我想注释它们然后在子类中实现它们但它不起作用! 这是一个示例代码: public abstract class RootResource { @GET @Path(“/{id: .*}”) public abstract String getInfo(String uid); } @Path(“/user”) public class UserResource extends RootResource{ public String getInfo(@PathParam(“id”) String uid) { System.out.println(“Hello!”); } } 我正在使用jersey2.6。 任何想法? 谢谢。

多重inheritance

在你开始投票给我之前请大家阅读这个问题,请理解我不会尝试在这里开始任何不愉快的事情。 这个问题的唯一原因是我越来越意识到这一点,为了更有用,我必须知道Java和/或C#。 好的,这是一个问题: 我知道在J和C#中禁止多重inheritance。 但是如果我做这样的事情(因为我希望有一个inheritance自B和A两个类的类): //code in Java public class B { public void methodFromB() { } } public class A extends B { public void methodFromA() { } } public class C extends A { public void methodFromC() { } } 事实上,据我所知,我确实inheritance了它们(A和B,是的,我确实理解对此的正式解释是对象A是一个专门的B但是如果我想这样做的话就更少了我会,但它看起来不漂亮) 但是,不是在一个声明中执行此操作,而是必须首先创建一个inheritance自另一个类的类,然后从它派生? 虽然有趣的事情。 在上面声明了这些类(在NetBeans中)之后,我看到在创建了类C的实例(在main中)之后,我无法在其上调用methodFromC,这是此类中定义的方法。 这是什么原因? 谢谢。

Java实例变量可访问性

Java中以下变量的可访问性有何不同? public class Joe { public int a; protected int b; private int b; int c; } 我最感兴趣的是最后一个人在做什么。

java:inheritance

inheritance有哪些替代方案?

为什么Java需要明确的向下转换?

我已经看到了类似问题的其他答案,但所有这些答案都依赖于语言被定义为这样的事实。 以下是我正在寻求解释: 在inheritance层次结构中,父类型可以隐式保存子对象(为什么?),但是对于保存父对象的子引用,显式向下转换是必要的(为什么?)。 请举一些例子来解释为什么不这样做会失败,我的意思是使用动物,狗类型等。如果这个问题已经回答了我错过了它,引用它也会有所帮助。 例如: class Animal{ public void eat(){}; } class Dog extends Animal{ public void bark(){}; } class App{ Animal an = new Dog(); //1. why can animal store a dog but not a dog store an animal Dog dog = (Dog) new Animal(); //2. Dog has the behavior of an Animal so […]