2014-09-06 84 views
1

我在Java初学者,所以请原谅我,如果这个问题是达不到这个网站的标准:Java默认访问修饰符

class person{ 
    String name; 
    int age; 
} 
class teacher extends person{ 
    person s1=new person(); 
    teacher t1=new teacher(); 
    t1.age=56; 
} 

在这里,我试图访问变量的年龄和名字给他们分配值的人,这恰好是人的超级阶层。但编译器给出了错误。我甚至试图让名称变量和年龄变量公开。但编译器仍在报告错误。我想知道为什么我无法直接访问子类中的超类变量并为其分配值。

+0

你什么错误?你正在使用代码('''t1.age = 56;''')。 – MrTux 2014-09-06 17:01:21

+3

好的,即使是初学者也应该能够适当地使用空格键... – 2014-09-06 17:01:23

+1

当编译器给出错误时,请始终将其包含在您的问题中。 – 2014-09-06 17:03:46

回答

2

您不能在类体内直接编写任意代码。最接近的东西给你所写的内容是

class teacher extends person{ 
    person s1=new person(); 
    teacher t1=new teacher(); 
    { 
    t1.age=56; 
    } 
} 

这就是所谓的实例初始化块。

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; 
    } 
} 

做什么适合您的程序和你。

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); 
    } 

}