Tag: inheritance

Java:不能通用List mylist

另一个例子非常复杂,我根本不理解它,我的问题在某种程度上是类似的,但正如我所说的那样更简单,可能会在更简单的答案中产生 public List myfunction(List mylist){ mylist.add(new Child()) ; //Doesn’t Compile }

java方法重载inheritance和多态

这是我遇到的一个测试练习题,非常感谢您帮助我理解这些概念 让Hawk成为Bird的子类。 假设某些类有两个重载方法void foo(Hawk h)和void foo(Bird b)。 在声明Bird x = new Hawk()之后,将在调用foo(x)中执行哪个版本; 这是我到目前为止的代码,有人可以向我解释为什么foo(鸟b)被执行? public class MPractice { public static void main(String args[]) { Bird x = new Hawk(); Third y = new Third(); y.foo(x); } } public class Third { void foo(Hawk h) { System.out.println(“Hawk”); } void foo(Bird b) { System.out.println(“Bird”); } }

为什么无法使用父引用访问子字段

class A { int super_var = 1; } class B extends A { int sub_var = 2; } public class Demo{ public static void main(String []args){ A a = new B(); System.out.print(a.sub_var); //compile error } } 为什么这会以编译错误结束? 引用(a)引用B的对象它有sub_var那么为什么它受到限制? 为什么参考(a)只能访问A中的字段?

对象创建(状态初始化)和线程安全

我正在研究“实践中的Java并发”这本书,发现在下面引用的声明中很难相信(但不幸的是它有意义)。 http://www.informit.com/store/java-concurrency-in-practice-9780321349606 只是想清楚这100% public class Holder { private int n; public Holder(int n) { this.n = n; } public void assertSanity() { if (n != n) throw new AssertionError(“This statement is false.”); } } 虽然在构造函数中设置的字段值可能看起来是写入这些字段的第一个值,因此没有“较旧”的值可以看作是过时值, 但是在子类构造函数运行之前 , Object构造函数首先将默认值写入所有字段。 因此,可以将字段的默认值视为过时值 关于上面的粗体陈述, 我知道行为但现在很明显,这个构造函数的调用层次结构并不保证是ATOMIC(在锁定保护的单个同步块中调用超级构造函数),但是什么是解决方案? 想象一个具有多个级别的类层次结构(即使不推荐,也可以假设它是可能的)。 上面的代码片段是我们在大多数项目中每天都看到的一种原型。

我可以通过基类类型引用访问子类方法吗?

下面是我正在尝试处理但无法解决问题的代码:“我能否真正在Java中执行以下操作。如果是,请帮助了解我”如何“,如果没有”为什么?“”。 ..看看下面的代码…… class Base{ public void func(){ System.out.println(“In Base Class func method !!”); }; } class Derived extends Base{ public void func(){ // Method Overriding System.out.println(“In Derived Class func method”); } public void func2(){ // How to access this by Base class reference System.out.println(“In Derived Class func2 method”); } } class InheritDemo{ public static void […]

复合inheritance:如何在子类构造函数中分配一个最终字段,该字段取决于’this’值(向后引用)?

我使用复合类来分组function。 但是,A类(具有复合A1)由B(具有复合B1)inheritance,并且A1处存在的行为将在B1处被调整,但是最终a1必须是B1实例才能使其工作。 Obs。:我有办法确保复合实例化正确发生(仅由其复合伙伴)。 无法将B1对象分配给a1 final字段: class finalFieldTestFails{ class A1{ A1(A a){} } class A{ protected final A1 a1; A(){ this.a1 = new A1(this); } A(A1 a1){ this.a1 = a1; } } class B1 extends A1{ B1(B b){ super(b); } } class B extends A{ //B(){ super.a1=new B1(this); } //FAIL: cant change final value //B(){super(new B1(this));} […]

为什么实例字段的值为空?

我有这段简单的代码。 abstract class X { X() { read(); } private void read() { Object obj = new Object(); readValue(obj); } protected abstract void readValue(Object obj); } class Y extends X { Object obj = null; Y() { super(); } @Override protected void readValue(Object obj) { this.obj = obj; } void printer() { System.out.println(“Object = ” […]

相当于BeanUtils.copyProperties的Objective c。

我想知道他们是否在JAVA的方法C中有一个等价的方法“BeanUtils.CopyProperties(bean1,Bean2);” ? 或者其他解决方案,我想将motherObject转换为childObject: @interface motherBean : NSObject{ …} @interface childBean : motherBean { …} motherBean m = [motherBean new]; childBean f = m; 第一次测试它的工作,但我有一个警告:“不兼容的指针类型返回……”; 我使用WSDL2Objc并生成bean,它的名称可以在2代之间改变: – / 我喜欢和孩子一起工作,只是改变她的定义中的名字 谢谢 安东尼

JPA实体inheritance与抽象类 – ConstrainViolationException

我正在尝试使用JPA注释和抽象类来设置实体inheritance。 我们的目标是让DAO通过其扩展与基础对象一起工作,这样我们就可以通过使用不同的实体扩展,切入点和覆盖来实现相同应用程序的突变,而无需更改提供者和管理者。 示例:基本应用程序堆栈有一个DAO提供程序,它使用抽象的Company实体来持久化所有扩展Company的对象: @Entity @Inheritance(strategy = InheritanceType.JOINED) public abstract class Company extends AbstractPersistable { @Column(unique = true) private String register_number; // … } @Component public class CompanyProvider extends JpaProvider { // provides CRUD methods via an EntityManager } (JPAProvider设置供参考:) public abstract class JpaProvider implements JpaRepository, JpaSpecificationExecutor, QueryDslPredicateExecutor { @PersistenceContext private EntityManager em; 应用程序A将公司扩展到CompanyDefault添加自己的列但不更改DAO。 申请B应该这样做: @Entity […]

内存如何分配以及存储在哪里? :Javainheritance

您好我有一个特定的Javainheritance问题。 以下是我的代码 class Parent{ int x = 5; public void method(){ System.out.println(“Parent”+ x); } } public class Child extends Parent{ int x = 4; public void method(){ System.out.println(“Child”+ x); } public static void main(String[] args){ Parent p = new Child(); System.out.println(((Child) p).x); System.out.println(px); } } 现在我的问题是在运行此程序时实际发生在幕后的情况。 什么得到inheritance? 在记忆位置的哪里? 为什么第一个syso给出4,第二个给出5?(这个我能在某种程度上理解,但对上面两个的澄清将有助于更清楚地理解它) 请指导