package ch07;

public class Ch0709
{
 public static void main(String[] args)
 {
  Father f= new Father();
  f.giveMoney();
  System.out.println(f.money);
 }
}

***** Farmer.java ******
package ch07;

public class Farmer //옆집에 사는 농부 ..
{
 public Father father;
 
 public Farmer()
 {
  // TODO 자동 생성된 생성자 스텁
 }
 
 public Farmer(Father father) //로컬변수 -> 멤버변수로 선언하고 대입하는 절차 걸쳐야함.
 {
  // TODO 자동 생성된 생성자 스텁
  //멤버변수에 대입(이유 : 매개변수는 로컬변수이므로 아래의 receiveMoney에서 인식못함.
  this.father = father;
 }
 
 //외부사람이 아버지돈 가져갈때.
 public void receiveMoney()
 {
  father.money -= 10000;
 }
}

**** Father.java *****
package ch07;

public /* final */ class Father //final 상속시키지 않겠다고 명시한것.
{
 //0604추가
 public int money = 50000;
 
 //Farmer에게 줄때는 계승관계가 아니니 소유..
 public void giveMoney()
 {
  Farmer farmer = new Farmer(this);
  farmer.receiveMoney();
  }
 
// 내부클래스 : 클래스안의 클래스의 형태로 본질은 외부에 클래스가 존재하는것과 다르지 않다.
// 멤버변수도 둘수 있으며, 멤버함수도 사용 가능하다.
// (다만 이너클래스가 존재하는 메인클래스에서만 사용이 가능하므로
// 모듈화 용도에는 적합하지 않다.)
//장점은 메인클래스의 멤버변수를 내것처럼 자유로이 참조하여 쓸 수 있다.
 
 public /* final */ void work()  // final 하위클래스에서 오버라이딩 허용안함.
 {
  System.out.println("아버지께서 일하셔"); //상속과 클래스 레퍼런스 관계 위해...  
 }
 
 class Uncle
 {
//  public int a; //자유롭게 쓸수 있다.
//  public void print()
//  {
//  
//  }
  public void receiveMoney()
  {
   money = money-20000;
  }
 }
 
 
}

Posted by 말없제이
,