【发布时间】:2015-06-25 19:06:40
【问题描述】:
我在从另一个类访问字符串时遇到问题,我不知道我可以让它变得更简单。例如,我有一个名为“Person”的类,我有一个字符串名称。我通过构造函数和直接设置名称的“名称”。我还有另一个名为 Loan 的课程,我还没有尝试访问任何内容。我的最后一堂课叫做“App”,这就是一切完成的地方。
顺便说一句 - Person 是我的超类,Loan 扩展了 Person,App 扩展了 Loan,它们都在同一个包中。
现在在我的 App 类中,我尝试访问我创建的唯一人员对象的字符串“名称”。我再次通过构造函数直接分配了名称,但不知何故这不起作用。最初我的名字集是受保护的,因为我是怎么理解的: protected = 访问同一类、同一包或子类中的方法/变量 即使在我公开我的字符串之后,它仍然无法正常工作。我完全迷路了......
当我输入时
System.out.println(omid.name);
它说它无法解析为变量,我需要制作一个本地变量。
谢谢!
这是我的 Person 代码:
package Programs;
public class Person {
public String name;
protected int age;
protected int id;
protected String status;
protected int alienNumber;
protected int socialSecurityNumber;
Person()
{
}
Person(String name, int age, int id)
{
this.name = name;
this.age = age;
this.id = id;
}
public void setid(int id)
{
if(id >= 100000)
{
this.socialSecurityNumber = id;
System.out.println("You are now a citizen " + name);
System.out.println("Social Security Number: " + socialSecurityNumber);
}
else
{
System.out.println("Sorry " + name + " you do not meet the qualitifactions for citizenship");
alienNumber = id;
System.out.println("You alien number is: " + alienNumber);
}
}
public String toString()
{
if(id >=99000 )
{
status = "citizen";
}
else
{
status = "immigrant";
}
return "Name: " + name +
"Age: " + age +
"Id: " + id +
"Status " + status;
}
public static void main(String[] args)
{
Person omid = new Person("omid nassir", 28, 120000);
omid.name = "omid";
}
}
贷款代码
package Programs;
import Programs.Person;
public class Loan extends Person{
public static final int LOANAMOUNT1 = 250000;
public static final int LOANAMOUNT2 = 500000;
public static final int LOANAMOUNT3 = 750000;
public static final int LOANAMOUNT4 = 1000000;
public int income;
public int loanRequested;
Loan(int income, int socialSecurityNumber, int loanRequested)
{
this.income = income;
this.socialSecurityNumber = socialSecurityNumber;
this.loanRequested = loanRequested;
}
public void applyForLoan(String name, int socialSecurityNumber, int income, int loanAmount)
{
int obtainable = LOANAMOUNT1 / 4;
if(socialSecurityNumber >= 99999)
{
if(income > obtainable)
{
obtainable = loanAmount;
System.out.println("Congradulations " + name + " you are eligible for loan amount of " + loanAmount);
}
}
else if(socialSecurityNumber <=99999)
{
obtainable = LOANAMOUNT1;
System.out.println("Sorry " + name + " in order to qualify for " + loanAmount + " you need to be"
+ " a citizen and have a minimum income of " + obtainable);
System.out.println("Loan amount granted: " + LOANAMOUNT1);
}
}
}
应用代码
package Programs;
public class App extends Person {
public static void main(String[] args)
{
System.out.println(omid.name);
}
}
【问题讨论】:
-
您有 2 个
main(String[] args)方法(在 App 和 Person 中)。我不确定你要做什么,但你只需要 1 -
"App" 正在扩展 "Person",因此应该继承字符串 "name"。因此,您可以像访问局部变量一样访问它。
System.out.println(name);除非“omid”是另一个“人”。但在您的情况下,您只有 1 个人员对象,因此它应该只使用name而不是omid.name -
当 App 类扩展一个 Person 时,并不意味着在 App.main() 中你将拥有你在 Person.main() 中创建的东西
-
@AlexNevidomsky - 好的,这就是我的主要问题,谢谢。但只有一个问题。如果我要扩展一个类,我要继承什么?谢谢。
-
非常粗略地说,您会得到非私有的方法和字段。但这是一个很长的话题,有很多细节,你最好分开研究。这里的诀窍是,在新类中创建具有相同名称的事物时,您会“丢失”该继承。然后你必须明确地调用“旧版本”。
标签: java inheritance package subclass extends