我是java的初学者,所以如果这个问题不符合本网站的标准,请原谅我:
class person{
String name;
int age;
}
class teacher extends person{
person s1=new person();
teacher t1=new teacher();
t1.age=56;
}
这里我试图访问变量age和class的名称,为它们分配值person,这恰好是person的超类。但是编译器给出了错误。我甚至尝试将名称变量和年龄变量设为公共变量。但编译器仍然报告错误。我想知道为什么我不能直接访问子类中的超类变量并为它们赋值。
答案 0 :(得分:2)
您不能直接在类体内编写任意代码。与你所写的最接近的是
class teacher extends person{
person s1=new person();
teacher t1=new teacher();
{
t1.age=56;
}
}
这称为实例初始化程序块。
答案 1 :(得分:1)
通常,直接访问变量不是一个好主意。考虑使用类似下面的代码。
测试驱动程序
package com.example.input;
public class TestPeople {
public static void main(String[] args) {
Person s1 = new Person();
s1.setName("student 1").setAge(19);
Teacher t1 = new Teacher("Dr. Fun",0);
t1.setAge(56);
System.out.println("Student " + s1.getName() + ", " + s1.getAge());
System.out.println("Teacher " + t1.getName() + ", " + t1.getAge());
}
}
班级人员
package com.example.input;
public class Person {
private String name;
private int age;
public Person() {};
public Person(String aName, int anAge) {
setName(aName).setAge(anAge);
}
public String getName() {return name;}
public int getAge() {return age;}
public Person setName(String aName) { name = aName; return this;}
public Person setAge(int anAge) { age = anAge; return this;}
}
班主任
package com.example.input;
public class Teacher extends Person {
public Teacher() {
super();
}
public Teacher(String aName, int anAge) {
super(aName, anAge);
}
}
答案 2 :(得分:0)
实际上,你正在现有的类体中对外部类的变量进行赋值,这是不合法的。在方法或构造函数或匿名块中进行赋值。
class person{
String name;
int age;
}
class teacher extends person{
person s1=new person();
teacher t1=new teacher();
// t1.age=56; Error here
public teacher()
{
t1.age=56;
}
//or method
public void setAge()
{
t1.age=56;
}
}
做任何适合你的计划和你的事。