我屡次搜索谷歌&堆栈溢出的直接答案,但没有找到。这是因为我的问题很容易回答,或者以前没有人问过。经过许多问题读书或多或少提的这个问题后,我得出以下结论:有没有什么办法可以让父类的实例变量直接由其子类(子类)引用?
一个父类的对象和儿童类的对象是相互完全独立,这意味着儿童类的对象不创建一个单独的父类对象,而是一个自包含的对象。
通过利用反射,您可以使用一种方法(许多人重新发布而不归因于上载代码的在线教程),该方法将一个对象的超类的所有字段(如果有的话)复制到另一个。这个方法是一次性的,并且实际上并没有改变变量的引用(这意味着如果2个对象,一个父类和一个子类,通过该方法,即使父类的变量内容将被复制到子类,如果父类的变量更改子类的变量将保持不变)。
通过利用静态变量和变量变量的方法,这些变量在运行时在所有类中共享,这意味着所有对象共享相同的变量。这不是我想要达到的。易变变量并不是一个解决方案,因为它们主要被实现Runnable用于它们的Thread实例的类所使用(并且,我认为,由于它们存储在RAM中而不是通过CPU传递,所以在所有类中共享)。
我们实际上解释我的问题,我想达到的目标是有一定的少儿班从单一的父类干,而且有多个这样的“我们的家庭却更”。例如,假设父类存储包含名称的字符串。我想要3个孩子从父母的字符串名称是“乔治”和其他3个孩子源于其父母的字符串名称是“尼克”。当存储在“乔治”父类中的字符串从“乔治”变为“帕特里克”时,我希望将它改为它的孩子,而不是“尼克”的孩子。
可以这样做吗?
如果这是一个新手问题,我非常抱歉,但我在单身大学的第一年,我们仍在学习如何循环,功能等工作。
编辑:
代码展示我的例子:
public class Parent {
private String name;
public Parent(String name) {
this.name = name;
}
public void changeName(String newName) {
name = newName;
}
public String getName() {
return name;
}
public void complexMethod() {
System.out.println(name);
}
//Multiple other complex methods here.
}
public class Child extends Parent {
public Child(Parent p) {
//Code which gets the memory references from the p Parent and stores them.
}
}
public class mainApp {
public static void main(String[] cmdArgs) {
Parent George = new Parent("George");
Parent Nick = new Parent("Nick");
Child a = new Child(George);
Child b = new Child(George);
Child c = new Child(Nick);
George.changeName("Patrick");
System.out.println(a.getName());//Prints "Patrick"
System.out.println(b.getName());//Prints "Patrick"
System.out.println(c.getName());//Prints "Nick"
a.complexMethod();//Calls complex method of Parent class with the String "Patrick" stored on the Parent class.
c.complexMethod();//Calls complex method of Parent class with the String "Nick" stored on the Parent class.
}
}
编辑2:
什么,他们要求我们做,直接翻译词对词与损失尽可能少的一个片段作为上下文可能:
“服务提供商”类“提供两种形式的服务,移动 互联网和移动蜂窝网络。此外,蜂窝网络被进一步分成两部分,一个蜂窝网络,其基于用户已签署卡合同 的事实以及基于用户 已经签署了一个事实而起作用的蜂窝网络移动合同。所有的服务都存储在 “收藏”(他们是直接引用到ArrayList的,因为他们 问导入特定库)是一流的“服务提供商 ”内。 (关于功能的详细信息在这里)
事实是,服务提供商构造函数接受和存储包含服务提供者的名称的String,这意味着如果我们要为同一个供应商,我们创建多种类型的服务浪费国际海事组织不好编程的记忆。 (实际上他们要求我们存储多种类型的服务为同一供应商)
您看起来像是一个[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),您在那里绑定以获得使用继承的代码解决方案,而最好的解决方案可能根本不使用继承,而是组合。你所说的这些“孩子”应该被看作是一个集合树中的节点对象,而不是子类。 –
他只是学习循环,不要打他的作文:p – Neilos
@ neilos:或许,但你必须承认,他吠叫错了树。这不是通过继承来解决的。 –