This is a bit complicated, but I will try to explain my problem. I created a program with a superclass ( RichIndustrialist ) of two subclasses ( PredecessorRichIndustrialist and one that I did not add) and 4 subclasses to these subclasses ( CrazyRichIndustrialist and 3 more). Now the program is too difficult to explain, but the problem is actually simple. My constructor is in a superclass, and each subclass uses it to initialize. Each time I create a new subclass object, such as CrazyRichIndustrialist , it discards all existing subclasses (from any subclass) to the value of the new object. I do not know how to fix this. Thanks in advance...
RichIndustrialist :
package Mortal; import java.util.Random; public class RichIndustrialist implements Mortal { private static String Name; private static double holdings; private static int Alive; public RichIndustrialist(String Rich_Name, double Rich_holdings) { this.Name = Rich_Name; this.holdings = Rich_holdings; this.Alive = 1; } public int isAlive() { return (this.Alive); } public void setHoldings(double new_holdings) { this.holdings = new_holdings; } public double getHoldings() { return (this.holdings); } public String getName() { return (this.Name); } public void die() { this.Alive = 0; } public void getHeritage(double heritage) { this.holdings = this.holdings + heritage; } }
PredecessorRichIndustrialist :
package Mortal; import java.util.Arrays; public class PredecessorRichIndustrialist extends RichIndustrialist { private static String Name; private static double holdings; private RichIndustrialist[] successors = {}; private static int Alive; public PredecessorRichIndustrialist(String Rich_Name, double Rich_holdings) { super(Rich_Name,Rich_holdings); } public void die() { super.die(); } public void Inheritance(double holdings, RichIndustrialist[] successors) { int i = 0; while (i < successors.length) { int Alive = successors[i].isAlive(); System.out.println(Alive); if (Alive == 0) { removeSuccessor(successors[i]); i++; } else { i++; } } } public void addSuccessor(RichIndustrialist new_successor) { RichIndustrialist[] new_successors = new RichIndustrialist[successors.length + 1]; if (successors.length == 0) { new_successors[0] = new_successor; successors = new_successors; } else { for (int i = 0; i < successors.length; i++) { new_successors[i] = successors[i]; } new_successors[new_successors.length - 1] = new_successor; } this.successors = new_successors; } public void removeSuccessor(RichIndustrialist removed_successor) { RichIndustrialist[] new_successors = new RichIndustrialist[this.successors.length - 1]; int j = 0; for (int i = 0; i < this.successors.length; i++) { if (!this.successors[i].equals(removed_successor)) { new_successors[j] = this.successors[i]; } else { j--; } j++; } } public RichIndustrialist[] getSuccessors() { return successors; } }
CrazyRichIndustrialist :
package Mortal; import java.util.Random; public class CrazyRichIndustrialist extends PredecessorRichIndustrialist { private RichIndustrialist[] successors = {}; private static String Name; private static double holdings; private static int Alive; public CrazyRichIndustrialist(String Rich_Name, double Rich_holdings) { super(Rich_Name,Rich_holdings); } public void die() { super.die(); Inheritance(getHoldings(),getSuccessors()); } public void addSuccessor(RichIndustrialist new_successor) { super.addSuccessor(new_successor); } public void removeSuccessor(RichIndustrialist removed_successor) { super.removeSuccessor(removed_successor); } public void Inheritance (double holdings , RichIndustrialist[] successors) { super.Inheritance(holdings, successors); for (int i=0; i<successors.length-1; i++) { double random = new Random().nextDouble(); double amount = this.holdings * random; successors[i].getHeritage(amount); holdings = this.holdings - amount; } successors[successors.length-1].getHeritage(this.holdings); this.holdings = 0; } public String getName(){ return super.getName(); } public double getHoldings(){ return super.getHoldings(); } public RichIndustrialist[] getSuccessors(){ return super.getSuccessors(); } public void setHoldings(double new_holdings){ super.setHoldings(new_holdings); } public int isAlive() { return super.isAlive(); } public void getHeritage(double heritage) { super.getHeritage(heritage); } }
source share