Tag: inheritance

generics和inheritance问题

我有三节课: public abstract class fileHandler { } public A extends fileHandler { } public B extends fileHandler { } 现在在我的主要function中我做这样的事情: fileHandler file= null; If () { fileHandler = new A(); } else fileHandler = new B(): } 但这会产生2个编译时错误: 无法将A转换为fileHandler 无法将B转换为fileHandler 我如何摆脱这些错误,因为如果基类不是通用的,我不会得到这个错误。 更新: 我的class级层次结构是: class fileHandler { } class A extends fileHandler { } class B […]

当用于2个不兼容的类时,为什么`instanceof`错误而不是返回`false`?

我正在读这个: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.20.2 他们说: 考虑示例程序: class Point { int x, y; } class Element { int atomicNumber; } class Test { public static void main(String[] args) { Point p = new Point(); Element e = new Element(); if (e instanceof Point) { // compile-time error System.out.println(“I get your point!”); p = (Point)e; // compile-time error } […]

Java中inheritance的私有方法

我对在inheritance中使用私有方法感到困惑,例如: public class A { private void say(int number){ System.out.print(“A:”+number); } } public class B extends A{ public void say(int number){ System.out.print(“Over:”+number); } } public class Tester { public static void main(String[] args) { A a=new B(); a.say(12); } } 基于上面的代码,我对私有方法的inheritance感到困惑,是从class Ainheritance到B的私有方法吗? 或者两个类中的say方法完全不相关? 由于代码在main()方法中运行时出错,似乎class B无法从class A调用私有方法。

降低静态方法的可见性

我知道一个孩子不能降低非静态方法的可见性,我理解为什么会这样。 然而,我已经阅读过“静态方法可以通过重新声明隐藏”。 但是我不明白如何在Java中实现这一点。 这真的有可能吗? 如果是的话,该怎么做(代码示例)以及它为什么被引入(它似乎与非减少接口可见性的原则相矛盾)?

我可以实例化一个超类,并根据提供的参数实例化一个特定的子类

我正在使用Google的GSON软件包http://code.google.com/p/google-gson/ 我正在将JSON转换为Java。 我有这段代码,我在那里进行转换。 Gson gson = new Gson(); Type collectionType = new TypeToken<Collection>() {}.getType(); Collection queryProperties = gson.fromJson(query, collectionType); 我的QueryProperty类有这些字段(带有getter / setter): int id; String uri; String name; Set values; String selected; QueryValue类具有以下字段(带有getter / setter): int id; String uri; String name; 我现在希望能够拥有不同types的QueryValue。 我想添加一个NumericQueryValue类(QueryValue的子类),所以我可以传入一组边界来查询db。 double lower; double upper; 并且想要创建一个新的ResourceQueryValue(QueryValue的子类),它看起来与用于以下的QueryValue相同: int id; String uri; String name; 无论如何我能做到这一点。 […]

Java:当B实现A时,从List 转换为List

我定义了以下类和接口: public interface A { } public class B implements A { } 我有一个B对象List ,我需要将其转换为A对象List : List listB = new List(); listB.add(new B()); // dummy data listB.add(new B()); // dummy data listB.add(new B()); // dummy data List listA = (List) listB; 上面的最后一行导致编译错误“无法从列表转换为列表”。 我尝试用以下方法解决这个问题: List listA = Arrays.asList((A[]) listB.toArray()); 不幸的是,抛出ClassCastException 。 有谁知道我怎么解决这个问题?

我是否可以为每种不同类型的inheritance类使用静态变量的不同副本

我希望具有相同的静态变量,具有不同的值,具体取决于类的类型。 所以我会的 public class Entity { public static Bitmap sprite; public void draw(Canvas canvas, int x, int y) { canvas.drawBitmap(sprite, x, y, null); } } public class Marine extends Entity { } public class Genestealer extends Entity { } 然后在我的主程序中去: Marine.sprite = // Load sprite for all instances of Marine Genestealer.sprite = // Load sprite […]

覆盖java中的方法,然后将对象转换为父类行为

我有一个父类A和一个子类,B和B覆盖了一个方法f,来自A. public class A { public String f() { return “A”; } } public class B extends A { … public String f() { return “B”; } public static void main(String[] args) { B b = new B(); A a = (A) b; System.out.println(bf()); //prints: B } } 我创建了一个类型为B,b的对象,并将其转换为类型A并将其分配给类型为A的变量a,然后在a上调用方法f。 现在我希望调用父类的方法,因为我正在处理类型A的对象,但事实并非如此,它调用方法的b版本(打印“B”而不是“A”)下面的代码)。 为什么会这样? 这是设计决策还是技术限制?

强制基本方法调用

Java或C#中是否有强制inheritance类来调用基础实现的构造? 你可以调用super()或base()但是如果没有调用它可能会抛出编译时错误吗? 那会很方便.. – 编辑 – 我主要是对重写方法感到好奇。

在范围内没有封闭类型的实例

我调查java内部类。 我写了一个例子: public class Outer { public Outer(int a){} public class Inner { public Inner(String str, Boolean b){} } public static class Nested extends Inner{ public static void m(){ System.out.println(“hello”); } public Nested(String str, Boolean b , Number nm) { super(“2”,true); } } public class InnerTest extends Nested{ public InnerTest(){ super(“str”,true,12); } } } 我使用以下字符串从main调用它: […]