[英]Java - access private instance variables
我需要从以下类列表(Species.java)中访问私有变量,以便在KlingonOx.java类中使用它们。
KlingonOx.java类的目的是确定多少年后大象物种的数量将大于Klingon Ox物种的数量。
这是Species.java类:
import java.util.Scanner;
public class Species
{
private String name;
private int population;
private double growthRate;
public void readInput()
{
Scanner keyboard = new Scanner(System.in);
System.out.println("What is the species' name?");
name = keyboard.nextLine();
System.out.println("What is the population of the species?");
population = keyboard.nextInt();
while(population < 0)
{
System.out.println("Population cannot be negative.");
System.out.println("Reenter population:");
population = keyboard.nextInt();
}
System.out.println("Enter growth rate (% increase per year):");
growthRate = keyboard.nextDouble();
}
public void writeOutput()
{
System.out.println("Name = " + name);
System.out.println("Population = " + population);
System.out.println("Growth rate = " + growthRate + "%");
}
public int predictPopulation(int years)
{
int result = 0;
double populationAmount = population;
int count = years;
while( (count>0) && (populationAmount>0) )
{
populationAmount = (populationAmount + (growthRate/100) * populationAmount);
count --;
}
if (populationAmount > 0)
result = (int)populationAmount;
return result;
}
public Species(String name)
{
name = name;
population = 0;
growthRate = 0.0;
}
public Species(int population)
{
name = "";
if (population > 0)
population = population;
else
{
System.out.println("ERROR: using a negative" + "population.");
System.exit(0);
}
growthRate = 0.0;
}
public Species(double growthRate)
{
name = "";
population = 0;
growthRate = growthRate;
}
public Species(String name, int population, double growthRate)
{
name = name;
if (population > 0)
population = population;
else
{
System.out.println("ERROR: using a negative" + "population.");
System.exit(0);
}
growthRate = growthRate;
}
public Species()
{
name = "";
population = 0;
growthRate = 0;
}
public void setSpecies(String newName, int newPopulation, double newGrowthRate)
{
name = newName;
if (newPopulation >= 0)
population = newPopulation;
else
{
System.out.println("ERROR: using a negative " + "population.");
System.exit(0);
}
growthRate = newGrowthRate;
}
public void setName(String name)
{
name = name;
}
public void setPopulation(int population)
{
if (population > 0)
population = population;
else
{
System.out.println("ERROR: using a negative" + "population.");
System.exit(0);
}
}
public void setGrowthRate(double growthRate)
{
growthRate = growthRate;
}
public String getName()
{
return name;
}
public int getPopulation()
{
return population;
}
public double getGrowthRate()
{
return growthRate;
}
public boolean equals(Species otherObject)
{
return (name.equalsIgnoreCase(otherObject.name)) &&
(population == otherObject.population) &&
(growthRate == otherObject.growthRate);
}
}
这是KlingonOx.java类:
import java.util.Scanner;
public class KlingonOx extends Species
{
public static void main(String[] args)
{
new KlingonOx().run();
}
public void run()
{
Species klingonox = new Species();
Species elephant = new Species();
System.out.println("Please enter data on the species Klingon Ox.");
klingonox.readInput();
klingonox.writeOutput();
klingonox.setPopulation(int population);
population = population;
klingonox.setGrowthRate(double growthRate);
growthRate = growthRate;
System.out.println("Please enter data on the species Elephant.");
elephant.readInput();
elephant.writeOutput();
elephant.setPopulation(population);
population = population;
elephant.setGrowthRate(growthRate);
growthRate = growthRate;
int year = 0;
if(klingonox.population < elephant.population)
{
while(klingonox.population < elephant.population)
{
klingonox.population = (int)(klingonox.population + (klingonox.population * (klingonox.growthRate/100) ) );
elephant.population=(int)(elephant.population + (elephant.population * (elephant.growthRate/100) ) );
year++;
}
System.out.println("KLINGON OX EXCEEDS ELEPHANT IN" + year + "YEARS");
}
else
{
while(klingonox.population > elephant.population)
{
klingonox.population=(int)(klingonox.population+(klingonox.population*(klingonox.growthRate/100)));
elephant.population=(int)(elephant.population+(elephant.population*(elephant.growthRate/100)));
year++;
}
System.out.println("ELEPHANT EXCEEDS KLINGON OX IN" + year + "YEARS");
}
}
}
KlingonOx.java类给我的错误是“种群”和“ growthRate”是Species中的私有实例变量,因此无法访问。 我尝试使用getPopulation和getGrowthRate方法调用来检索变量,但是我不确定如何正确执行操作。
任何反馈表示赞赏。
在具有变量的类中:
class Foo {
private int variable;
public int getVariable() { return variable; }
}
在客户类中:
class Bar {
void method() {
...
Foo foo = new Foo();
int population = foo.getVariable();
...
}
}
那几乎就是一切。
而不是使用klingonox.population
,应该使用klingonox.getPopulation()
-其他Species
对象也是如此。
这应该是您使用getPopulation
方法需要进行的唯一更改。
第一,
klingonox.setPopulation(int population);
population = population;
klingonox.setGrowthRate(double growthRate);
growthRate = growthRate;
如果要设置人口,请传递值klingonox.setPopulation(20)以及为什么要尝试将人口分配给人口。 KlingonOx中没有现场人口。 当您调用readInput()时,应该已经分配了您的总体名称和growthRate;
大象对象也是如此。
采用
klingonox.getPopulation();
private
访问修饰符允许我们隐藏变量,以便声明该变量的类只能被访问。 你上课-
public class Species {
private String name;
private int population;
private double growthRate;
public int getPopulation(){return population;}
public double growthRate(){return growthRate;}
}
这个概念也称为封装,其中我们使用public
方法来访问和修改private
变量。
-您要访问的instance variable
中的Super
从-Class Sub
级轿车。
-通过Getter-Setter
方法使用super
关键字。
例如:
public class Species
{
private String name;
private int population;
private double growthRate;
public int getPopulation(){
return this.population;
}
public double getGrowthRate(){
return this.growthRate;
}
public String getName(){
return this.name;
}
// Setters...........
}
public class KlingonOx extens Spices{
.......
.......
public static void main(String[] args){
int p = super.getPopulation();
........
........
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.