2014-09-06 2 views
1

나는이 질문이 웹 사이트의 표준까지하지 않은 경우 그래서 용서해주십시오, 자바 완전한 초보자입니다 : 나는 변수 나이와 이름을 액세스하려고 여기자바 기본 액세스 수정

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

+3

OK, 초보자라도 스페이스 바를 적절하게 사용할 수 있어야합니다 ... –

+1

컴파일러에서 오류가 발생하면 항상 질문에 포함하십시오. –

답변

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

}