Tag: inheritance

在Java中,如果子类使用实例子变量隐藏静态父变量,哪个变量将inheritance方法使用?

这可能是一件坏事,正如Java中的父级和子级类中所讨论的那样, 具有相同的实例变量? 。 (如果父变量名称被更改怎么办?那么它将不再被遮蔽。)但是,我仍然好奇不同的静态/非静态变量是否会相互影响。 一方面,我希望它们是相同的变量名称,因此会被遮蔽,但另一方面,似乎编译器可能基于静态区分两者。

我可以用Mockito / Powermock模拟一个超类的构造函数吗?

是否可以使用Mockito和可选的Powermock来模拟超类S ,以便对超类S任何调用(包括对S()构造函数的调用)都被模拟? 所以使用下面的例子,如果我使用MockS用MockS替换S , MockS对super()的调用是否会使用MockS中的构造MockS ? class S { S() { // Format user’s hard drive, call 911, and initiate self-destruct } } class T extends S { T() { super(); } } class Test { @Mock private S mockS; new T(); // T’s call to super() should call the mock, not the destructive S. […]

为什么静态方法不涉及多态(后期绑定)我看到错误,静态方法不能被覆盖

请考虑以下代码: class A{ public static void m(Number n){ System.out.println(“Number A”); }; } class B extends A{ public static int m(Number n){ System.out.println(“Number B”); return 1; }; } 输出: java中的:inheritanceTest.B中的m(java.lang.Number)不能覆盖inheritanceTest中的m(java.lang.Number)。返回类型int与void不兼容 我知道静态方法不涉及多态,因此我推断我的代码不可能覆盖。 这个编译器消息对我来说很奇怪。 据我所知,重写是多态的一部分。 我准备scjp,我害怕在熟悉的问题上犯错误。 请澄清这个问题。 我的预期行为 – 有关重载错误的消息 P.S1。 我已经阅读了关于静态覆盖的热门问题,我没有找到答案( P.S2。 据Pshemo回答: 这段代码: class Foo{ public static void m(Number n){ System.out.println(“Number A”); }; public static int […]

避免在Java中重复导入:inheritance导入?

有没有办法“inheritance”import? 例: 常用枚举: public enum Constant{ ONE, TWO, THREE } 使用此枚举的基类: public class Base { protected void register(Constant c, String t) { … } } 需要导入的子类才能方便地使用枚举常量(没有枚举名称): import static Constant.*; // want to avoid this line! public Sub extends Base { public Sub() { register(TWO, “blabla”); // without import: Constant.TWO } } 和另一个具有相同导入的类…… import static Constant.*; […]

为什么Java不允许通过实例方法隐藏静态方法?

如http://docs.oracle.com/javase/tutorial/java/IandI/override.html所示,Java确实允许 通过实例方法覆盖实例方法 通过静态方法隐藏静态方法 我的问题是为什么Java不允许通过实例方法隐藏静态超类方法 。 这可以这样做: class Base { static void foo () {} } class Derived extends Base { void foo () {} void access () { foo (); Base.foo (); } } 我没有看到上述方法有任何特殊问题 – 它只是像“允许”隐藏静态的那样“混乱/复杂”。

无法从不同jar中的同一个包访问超类的受保护成员

我有一个奇怪的问题,当我试图插入我的程序时,我无法弄明白这个问题。 另一个问题是我无法创建一个简单的测试用例,因为每次我尝试它都有效。 必须有一些我不知道的并发症。 但我会尽可能清楚地描述情况,以防任何人听起来都很熟悉。 我有一个名为Seed的基类,它是主应用程序的一部分,由系统类加载器加载。 我有一个插件,其中包含一个类Road,它是Seed的子类。 它在运行时从单独的jar文件加载。 类Road引用了Seed.garden字段,定义为: 保护最终花园; 请注意,我没有收到编译错误。 当插件jar包含在系统类路径中时,我也不会遇到运行时错误。 只有当我的主应用程序使用新的类加载器(系统类加载器作为其父类)加载插件时才会出现错误。 错误是: java.lang.IllegalAccessError:尝试从类package.Road $ 4访问字段package.Seed.garden 它必须与子类由超类不同的类加载器加载这一事实有关,但我找不到任何官方原因,为什么它不起作用。 另外,就像我说的,当我尝试用简单的测试用例(包括单独的jar,用不同的类加载器加载子类等)重现问题时,我没有得到错误。 我也不太可能违反访问规则,因为当类由同一个类加载器加载时它工作,我不会遇到编译错误。 我没有想法! 有没有人认识到这个问题,或者有一些指示我的方向可以看? 救命!

计算每个派生类的类实例

有没有办法让所有派生类计算他们的实例?如何(用C ++,C#,Java之一编写代码)? 想象一下,我可以访问根类(例如对象),并且每个其他类(直接或间接)都是从这个类派生的。 我想要的是: AnyDerivedClass.InstancesCount() 问题是,必须跟踪静态变量中的计数,但是不可能将静态变量“注入”到基类的派生类中,这仅适用于成员变量。 也就是说,我必须写下这样的东西: class object { private static int count = 0; protected object() { ++count; } protected ~object() { –count; } public static InstancesCount() { return count; } }; class derived : object { private static int count = 0; public derived() { ++count; } public ~derived() { –count; } […]

带有变量参数列表的抽象方法

我还没有找到解决这个问题的优雅方法。 我有一个抽象类,其他几个类inheritance了一个抽象方法,可以包含0到4-5个不同类型的参数。 public abstract class Item { public abstract void use(); } 例如,我有一个inheritance了这个并且在重写use()时没有参数的Book类,我有一个Key类,它inheritance并在重写时将String和Queue作为参数… 我已经尝试过使用generics,但是当它实际上取决于类时,我必须输入使用的数字,例如Item。 public abstract class Item { public abstract void use(T arg1, U arg2); //Number of arguments/types could be more or less } 我已经尝试发送一个对象的变量列表,但对象类型总是变量的,我不确定在inheritance类中接收的语法。 public abstract class Item { public abstract void use(T… arguments); } public class Book extends Item { public void […]

内在的阶级延伸

在java中,假设我有以下类: public class A{ protected class B{ } } 我可以通过以下方式扩展内部类吗? public class C extends A{ protected class D extends B{ } } 我想要做的是我有上面的C类,我需要在A的内部类中改变一些东西,所以我认为我需要扩展内部类来这样做,但我不确定如何做到这一点。

为什么HashMap在扩展AbstractMap时会实现Map?

可能重复: Java.util.HashMap – 为什么HashMap扩展了AbstractMap并实现了Map? 在java中实现HashMap我们需要实现Map 。 但是,当我在java类中调试更多时,似乎…. java定义HashMap类如下。 public class HashMap extends AbstractMap implements Map, Cloneable, Serializable 同时我看到public abstract class AbstractMap实现Map它还实现了接口Map 。 如果抽象类实现了接口,那么在HashMap类级别实现Map背后的原因是什么? 根据我的理解, HashMap类具有从AbstractMapinheritance的所有方法,可以根据需要由HashMap覆盖。