Tag: inheritance

Java:跨包的受保护访问

我想了解下面示例中发生的情况(通过子类从包外部访问受保护的成员)。 我知道对于包外的类,子类只能通过inheritance来查看受保护的成员。 有两个包: package1和package2 。 package1 : ProtectedClass.java package org.test.package1; public class ProtectedClass { protected void foo () { System.out.println(“foo”); } } package2 : ExtendsprotectedClass.java package org.test.package2; import org.test.package1.ProtectedClass; public class ExtendsprotectedClass extends ProtectedClass { public void boo() { foo(); // This works, // since protected method is visible through inheritance } public static void […]

在java中,我们可以将超类Object传递给子类引用吗?

在java中,我们可以将超类Object传递给子类引用吗? 我知道这是一个奇怪的问题/实际上不可行,但我想理解这背后的逻辑为什么它不允许在java中。 class Employee { public void met1(){ System.out.println(“met1”); } } class SalesPerson extends Employee { @Override public void met1(){ System.out.println(“new met1”); } public void met2(){ System.out.println(“met2”); } } public class ReferenceTest { public static void main(String[] args) { SalesPerson sales = new Employee(); // line 1 sales.met1(); // line 2 sales.met2(); // line 3 […]

查找类集合的最近公共超类(或超接口)

给定一组类,找到最近的公共超类的最佳方法是什么? 例如,给出以下内容: interface A {} interface B {} interface AB extends A, B {} interface C {} class AImpl implements A {} class ABImpl implements AB {} class ABImpl2 implements A, B {} class BCImpl implements B, C {} 我希望以下(不详尽): commonSuperclass(A, AImpl) == A commonSuperclass(A, B, C) == Object or null, I’m not picky commonSuperclass(A, […]

当只有子类实现可序列化时,序列化如何工作

只有子类实现了Serializable接口。 import java.io.*; public class NewClass1{ private int i; NewClass1(){ i=10; } int getVal() { return i; } void setVal(int i) { this.i=i; } } class MyClass extends NewClass1 implements Serializable{ private String s; private NewClass1 n; MyClass(String s) { this.s = s; setVal(20); } public String toString() { return s + ” ” + […]

创建子类的实例是否会自动创建其超类对象?

如果我创建子类的对象,那么还将创建从inheritance子类的超类对象吗? 如果没有,那么如何通过创建Thread类的子类(在multithreading中)调用Thread类构造函数并创建一个Thread对象?

Javagenerics方法inheritance和覆盖规则

我有一个具有generics方法的抽象类,我想通过将特定类型替换为generics参数来覆盖generics方法。 所以在伪代码中我有以下内容: public abstract class GetAndParse { public SomeClass var; public abstract void getAndParse(T… args); } public class Implementor extends GetAndParse { // some field declarations // some method declarations @Override public void getAndParse(SpecificClass… args) { // method body making use of args } } 但由于某种原因,我不允许这样做? 我是在做某种语法错误还是这种inheritance和覆盖不允许? 特别是我收到关于@Override的错误,因为eclipse IDE一直在提醒我实现getAndParse 。 以下是我希望上述代码的工作方式。 我的代码中的其他地方有一个方法,它需要实现GetAndParse的对象实例,这特别意味着它们有一个我可以使用的getAndParse方法。 当我在该实例上调用getAndParse时,编译器会检查我是否以正确的方式使用了T特定实例,因此特别是T应该扩展AnotherClass并且它应该是SpecificClass 。

有没有办法确定类是Java的实例的类型?

假设我有3个类,如下所示: class A {} class B extends A {} class C extends A {} 那么可以确定特定对象是A , B还是C的实例? 我认为这样的事情可能有用: if (myObject.getClass().isInstance(B.class)) { // do something for B } else (myObject.getClass().isInstance(C.class)) { // do something for C } else { // do something for A } 但是在阅读了一下之后,我认为它总是会评估为B,因为它只是测试一个演员是否有效并且它们之间没有实质性差异。

Java工厂模式与generics

我希望我的BallUserInterfaceFactory返回具有正确generics类型的用户界面的实例。 我被困在下面的例子中得到错误: 绑定不匹配:BallUserInterfaceFactory类型的generics方法getBaseballUserInterface(BASEBALL)不适用于参数(BALL)。 推断类型BALL不是有界参数的有效替代 public class BallUserInterfaceFactory { public static BallUserInterface getUserInterface(BALL ball) { if(ball instanceof Baseball){ return getBaseballUserInterface(ball); } //Other ball types go here //Unable to create a UI for ball return null; } private static BaseballUserInterface getBaseballUserInterface(BASEBALL ball){ return new BaseballUserInterface(ball); } } 我知道它不能保证BALL是一个棒球,因此getBaseballUserInterface方法调用中存在参数类型不匹配。 如果我在getBaseballUserInterface方法调用中转换ball参数,那么我得到错误: 类型不匹配:无法从BaseballUserInterface转换为BallUserInterface 因为它不能保证我返回的是同一类型的BALL。 我的问题是,处理这种情况的策略是什么? (为了完整性,这里是示例中所需的其他类) public class Ball { […]

为什么抽象方法不能同步?

我正在从CodeRanch读取一个线程,说抽象方法无法同步,因为抽象类无法实例化,这意味着没有锁定对象。 这没有意义,因为抽象类是子类的定义(契约)。 子进程的同步方法的抽象定义不需要锁定。 所有抽象标题都表明孩子必须同步这个方法。 我的逻辑是否正确? 如果没有,有人可以解释为什么我错了吗?

为什么Java允许来自接口的多重inheritance,而不是来自抽象/具体类

可能重复: 为什么Java中没有多重inheritance,但允许实现多个接口 为什么Java允许从接口进行多重inheritance,而不是从抽象或具体类inheritance