관리 메뉴

nkdk의 세상

자바 Language 6일째 본문

My Programing/JAVA

자바 Language 6일째

nkdk 2008. 3. 8. 01:06
package inh;

/* 263P에 상속에 대한 개념이 나와 있습니다.
* 자원의 재 활용을 위해 상속을 사용한다.
* 술의 개념으로 설명되었다. 마시면 취한다라는 것...
* 맥주, 소주, 양주 = 취한다.
* 술 = 취한다. 맥, 소, 양 = 먹으면 취한다. 술이라는 곳에 정의 한다.
* 내가 해야 될 것을 위에서 미리 다 해 놓아서 그걸 받아다가 쓰는 것이다.
* 자식 클래스에서 하는 일들을 부모에서 하나 만들어 놓고 상속 시켜 버리는 것이다.
* 슈퍼클래스와 서브클래스가 있다. 메소드를 받았는데 그것이 마음에 안 들면 오버라이딩 시킬 수 있다.
* 상속이 등장함으로 인하여 다형성을 구현할 수 있다. 현재 클래스의 이름으로 다른 클래스의 이름으로 지정할
* 수 있다. 오버라이딩이 나오면서 추상케이스, 인터페이스 -> 내부 클래스 무명 클래스까지만 하면 클래스..
* 다중 상속은 프로그램의 오류에 빠지기 쉽기 때문에 자바에서는 다중 상속 자체가 되지 않는다.
* 인터페이스를 쓰면 다중상속과 비슷한 효과를 가지게 된다.
* 클래스를 만들 때는 생성자를 꼭 만들어 주어라(메인 메소드 있는 곳은 제외)
*/

public class grandfa {
private int nai;
public String gabo ="상감청자";
protected String gahun="열심히 살자";
public grandfa() {
System.out.println("할아버지 생성자");
}
public grandfa(int nai) {// 생성자 오버로딩
this(); // 생성자가 생성자를 호출함.
this.nai=nai;
}
public String say() {
return "이제 "+nai+"인 할아버지 말씀: 일해라~";
}
public void eat(){
System.out.println("밥은 맛 있게");
}
public int getNai() {
return nai;
}
}


package inh;


public class Mygajok {
public static void main(String[] args) {
grandfa gr=new grandfa(); // 1 . 먼저 만들어 주어야 한다.
System.out.println("가보:" + gr.gabo);
System.out.println("가훈:" + gr.gahun);
System.out.println(gr.say());
grandfa gr1=new grandfa(82);
System.out.println(gr1.say());
System.out.println(gr1.say());
gr1.eat();
System.out.println("\n-- 아버지--");
Father fa=new Father(); // 2. gr 다음에 두번째로 만들어 줘야 한다.
System.out.println("가보:" + fa.gabo);
System.out.println("가훈:" + fa.gahun);
System.out.println(fa.say());
// 부모클래스가 있는 상태에서만 자식 클래스를 만들 수 있다.
new Father(88); // 안 써 먹을거라면 이렇게 해도 무방하다.
System.out.println(gr1.getNai());
System.out.println("아버지의 나이"+fa.getNai());
System.out.println("가훈:" + fa.gabo);
System.out.println("집:"+fa.getHouuse());
// System.out.println("집:"+gr.getHouuse()); // 바로 불러오는 이건 안된다.
System.out.println("할아버지 연세:"+fa.getGrNai());
System.out.println("\n-- 아버지--");
Me me=new Me(); // 3. fa 다음에 세번째로 만들어 줘야 한다.
System.out.println("가보:" + me.gabo);
System.out.println("가훈:" + me.gahun);
System.out.println(me.say());
me.eat();
System.out.println(me.Biking());
}
}


package inh;
public class Father extends grandfa {
private int nai=55;
private int house=1;
public String gabo="물병";
public Father() {
super(); // <-- 이게 있는것이나 마찬가지이다.
System.out.println("아버지 생성자");
}
public Father(int n) {
super(n);
System.out.println("아버지 생성자2");
}
/*
public String say() {
// 메소드 오버라이딩(grandfa 부모의 메소드와 똑같아야 한다) 앞에 public, protected 는 변경 가능
return "인생을 즐겨라";
} */
public int getNai() {
return nai;
}
protected int getHouuse(){
return house;
}
public int getGrNai(){
return super.getNai(); // 한칸 상위 클래스의 super라고 불러 전에 값을 받아 온다.
}

}

package inh;

public class Me extends Father{

public Me() {
System.out.println("내 생성자");
}
public String Biking() {
return "자전거로 전국 일주";
}
}

이렇개 4개의 클래스를 만드는 연습을 했습니다. 오츠까레~