如何将超类对象与基类对象分开?

时间:2014-10-09 09:10:23

标签: java inheritance superclass

我有两个班,A班和B班。

class A {

  String abcd;
  String efgh;
}

class B extends A {

  String check1;
  String check2;
}

我在另一个班级中有一个B级对象。我想从子类B得到一个单独的A类对象。在java中是否有任何特殊的方法来分离这两个类?请帮助我得到正确的答案。

4 个答案:

答案 0 :(得分:3)

  

我在另一个班级中有一个B级对象。我想从子类B中获得A类的单独对象。

只有一个对象,而不是两个。

  

java中有没有用于分隔这两个类的特殊方法?

不,因为再次,只有一个对象。

通常有两种方法可以 AB个方面的<{1}}方面:

  1. 通常使用A中的复制构造函数,创建对象的A方面的副本。这将创建一个新的第二个对象,该对象复制特定于A的实例的各个方面。如果A没有适合的复制构造函数,您必须添加一个(如果您可以修改A)或创建自己的方法来执行此操作(如果可能的话,有些班级有他们不透露的状态。)

    例如,这里的A带有复制构造函数:

    class A {
    
      String abcd;
      String efgh;
    
      public A(A a) {
        this.abcd = a.abcd;
        this.efgh = a.efgh;
      }
    }
    

    然后,如果你有一个B实例:

    B b = new B();
    

    ...您使用复制构造函数将<{strong>}的A方面复制到第二个对象:

    A a = new A(b);
    
  2. 如果您只想引用A类型而非B的现有对象,则只需执行作业:

    B b = new B();
    A a = b;
    

    仍然只有一个对象,它仍然是B对象,但a变量只能访问属性和为A定义的方法。

  3. 我怀疑你可能想要复制构造函数,但我想我应该提一下,以防你只是试图隐藏部分代码的B功能(这并不常见) )。

答案 1 :(得分:0)

只有一个对象(子类)。打印this并检查。

实际上我需要B类的A类对象

这不是组合,扩展类意味着继承,你不会在B类实例中拥有类A实例。

答案 2 :(得分:0)

classBObject.getClass().getSuperclass()会返回Class B的父类。

答案 3 :(得分:0)

  

我在另一个班级中有一个B级对象。我想从子类B中获得A类的单独对象。

在您提供的设计中,实际上只有一个 B 对象继承自 A ,因此两个对象之间的关系是&#34; {{3 }}&#34;关系。如果存在这种关系,则无法将这两个类分开。在组合的情况下,(&#34; is a&#34;关系)你可以获得封装对象,第二个关系的天真实现看起来像这样:

 class A {
  String abcd;
  String efgh;
 }

 class B {
   String check1;
   String check2;
   A a;

   A getA() {
      return a;
   }
}