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