【问题标题】:Java transferring variables from a super class to the sub classJava将变量从超类传递到子类
【发布时间】:2013-02-25 04:56:04
【问题描述】:

在java中我有一个扩展类B的类A

我想将 B 类的所有内容分配给 A 类 问题是我想从 A 类内部进行,现在这似乎很容易做到,只需转移所有变量。

这是最难的部分。我没有让 B 类成为 android.widget 的一部分 在 c++ 中,您只需接受 b 类,然后分配给 *this 并强制转换它。

我将如何在 java 中执行此操作?

为了进一步阐明它是一个相对布局,我需要将一个相对布局的所有内容复制到一个扩展相对布局的类中

class something extends other
{
public something(other a){
 //transfer all of the other class into something
 this=(something)a;  // obviously doesn't work
 //*this doesn't exist?
 //too many variables to transfer manually
}
}

非常感谢大家的帮助。真的很感激!!!

【问题讨论】:

  • 当你扩展一个特定的类时,你会自动继承该类的所有属性。不是吗?
  • 我认为他有一个A类的对象和一个B类的对象,想将B类的字段值复制到A类的对象中。
  • other a 所指的对象的确切类型是什么?如果它属于something 类,那么您的代码肯定可以工作..
  • 这就是我想要的 Jean Waghetti
  • 如果您知道所有这些变量的名称,那么您可以使用反射 API 复制这些值。

标签: java constructor this extends


【解决方案1】:

请参阅下面给出的代码。它使用java.lang.reflect包从超类中提取所有字段并将获得的值分配给子类变量。

import java.lang.reflect.Field;
class Super
{
    public int a ;
    public String name;
    Super(){}
    Super(int a, String name)
    {
        this.a = a;
        this.name = name;
    }
}
class Child extends Super 
{
    public Child(Super other)
    {
        try{
        Class clazz = Super.class;
        Field[] fields = clazz.getFields();//Gives all declared public fields and inherited public fields of Super class
        for ( Field field : fields )
        {
            Class type = field.getType();
            Object obj = field.get(other);
            this.getClass().getField(field.getName()).set(this,obj);
        }
        }catch(Exception ex){ex.printStackTrace();}
    }
    public static void main(String st[])
    {
        Super ss = new Super(19,"Michael");
        Child ch = new Child(ss);
        System.out.println("ch.a="+ch.a+" , ch.name="+ch.name);
    }
}

【讨论】:

  • 我将不得不坐下来看看它是否有效。我做了一个在我的情况下有效的工作,但实际上并没有回答这个问题。但我以后得看看这个。谢谢似乎是真正的交易:D
  • 这不会出现在私有字段上吧?可能会成为问题。如果 android.widget.RelativeLayout 有任何非常重要的私有字段而不是受保护的?有人知道吗?
  • @Lpc_dark:子类永远无法访问超类的私有字段。让超类来处理它的私有字段。这符合最重要的规则..
  • 非常感谢。现实生活中的英雄就是你
【解决方案2】:

这将工作:

Something something = (Something) other.clone();

如果 other 的真正的运行时类型Other

相反,您必须创建一个复制构造函数,或者将other 实例化为Something 的实例,然后克隆它。

【讨论】:

  • 该对象是一个 android.widget.RelativeLayout 我将无法访问它的所有内容以手动复制它
【解决方案3】:

所有父类(非私有)的变量和函数都可以在子类中直接访问,在子类中不需要赋值,可以直接访问。

【讨论】:

  • 正如我在问题中评论的那样,我认为他有一个 A 类的对象和一个 B 类的对象,并且想将 B 类的字段值复制到 A 类的对象。
  • 是的,这就是我想要的。我需要对象 b 字段以复制到对象 A,因为对象 A 扩展了 B
猜你喜欢
  • 2018-09-09
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多