Tag: inheritance

Javainheritance – 此关键字

我在网上搜索了类似的问题,但找不到它。 所以,发帖在这里。 在以下程序中,为什么“i”的值打印为100? AFAIK’this’指的是当前的对象; 在这种情况下,它是’TestChild’,类名也正确打印。 但为什么实例变量的值不是200? public class TestParentChild { public static void main(String[] args) { new TestChild().printName(); } } class TestChild extends TestParent{ public int i = 200; } class TestParent{ public int i = 100; public void printName(){ System.err.println(this.getClass().getName()); System.err.println(this.i); //Shouldn’t this print 200 } } 而且以下的输出正如我所期望的那样。 当我从Parent类调用“ this.test() ”时,将调用子类方法。 public class TestParentChild […]

Java中inheritance的坏例子是什么?

我知道Java中inheritance的优点,但我有点难以接受它也有缺点。 任何人都可以在Java中给我一个糟糕的inheritance示例吗?

使用inheritance的Struts2 Convention插件结果

有没有办法让struts2约定插件使用超类的结果? 我正在尝试创建一个通用的CRUD,如果子类中没有实现,则使用一般结果。 这可能吗?

Java:覆盖或重载方法?

我在一个名为“PlaceParser”的类中有一个extends “ModelParser”的方法: protected Place parseModel(JSONObject element) … Place是Model的子类。 是否应将@Override注释添加到上面的代码中? 由于该方法具有不同的返回类型,这仍然算作覆盖具有相同名称和参数的基类方法/返回类型是否改变了“签名”? “ModelParser”方法看起来像“ModelT”也扩展了“Model”: protected abstract ModelT parseModel(JSONObject element) throws JSONException; 更新@Jon Skeet: 基类声明如下: public abstract class ModelParser { 我之前没有看到过类的样式声明。

Java:扩展内部类

我试图理解在Java中扩展内部类。 我已经阅读过,但没有找到我的问题。 所以这里…… 我有… public class Pie{ protected Slice[] slices; // Pie constructor public Pie(int n){ sliceGenerator(n) } private void sliceGenerator(int n){ slices = new Slice[n]; final float sweepAngle = 360.0f/(float)n; float startAngle = 0; for (int i=0;i<n;i++){ slices[i] = new Slice(startAngle); startAngle += sweepAngle; } } @Override public String toString(){ for (Slice s:slices){ s.toString(); […]

扩展多个类

我知道Java不支持多inheritance,因为不允许扩展多个类。 我只是想知道我的问题是否有解决方法。 我有一个名为CustomAction类,它需要扩展两个抽象类, BaseAction和QuoteBaseAction 。 我不能改变任何这些抽象类,并将其他类扩展。 这些抽象类具有我需要使用的方法实现。 我也无法创建接口,因为接口只能扩展另一个接口。 有任何想法吗?

使用子类名访问父类静态字段不会加载子类?

class A { static int super_var = 1; static { System.out.println(“super”); } } class B extends A { static int sub_var = 2; static { System.out.println(“sub”); } } public class Demo{ public static void main(String []args){ System.out.println(B.super_var); } } 产出是: super 1 这意味着子类不会加载或任何其他东西? 它是如何工作的?

自动assemblySpring超类

为什么Spring在自动assembly期间会自动选择超类类型? 例如,如果我有 @Component public class Foo {} @Component public class Bar extends Foo {} 和某人自动assembly @Autowired private Foo foo; 为什么Spring总是选择超类型Foo ? 这不应该是一个“ 模糊 ”的映射(并导致Spring抛出错误)? 难道你不是技术上有两个 Foo候选人吗? (例如,当从Foo中删除@Component时,会自动选择 Bar …)

在Java中转换为具体类和调用方法

假设我们有一个名为A的基类和一些子类( B , C , D等)。 大多数子类都有方法do()但基类没有。 AA类提供了一个名为getObject()的方法,它将创建一个B或C或D等的对象,但是将该对象作为类型A返回。 如果此方法可用,如何将返回的对象强制转换为具体类型并调用其do()方法? 编辑: 我不允许更改类A ,子类或AA ,因为我使用一个封闭的源API ..是的,它确实有一些设计问题,你可以看到。

从子类更改超类实例变量的值

我发现我可以在子类中这样做: ParentClass.variable = value; 但我被告知最好使用get / set方法,而不是直接访问类外的变量。 虽然这是因为我在另一个类中有一个类的实例,而不是子类和超类。 那么有没有更好的方法来做到这一点,哪种方式通常被认为是最佳实践?