본문 바로가기

IT일반과목/java

자바 상속에 대하여2

자바 상속에 대한걸 보겠다.

그전에는 자바 상속에 기본적인 틀을 보았고

이번엔 그걸 응용해서 정보은닉(private)를 쓰고 난후 그거를 통해 부모메뉴판이 있고 자식 메뉴판에서 추가시키는걸 연습해보겠다.


Main에서 Child를 통해 값을 갖고오지만 Parent클래스에는 절대 손대는게 아니다. 자식클래스만 보는거기때문에 여기서 의미를 이해할 필요가 있다.


오버라이딩과 오버로딩 이라는게 있는데

오버리이딩 같은경우 2발 자전거가 있고 거기서 기능을 추가해 4발 자전거를 한다고 할땐 오버라이딩을 하지만


오버로딩 같은 경우는 매개변수를 다르게 하는것으로 똑같은 자전거인데 색깔이 다르게 오버로딩 한다는 의미이다.


자전거가 여러개 있는 상태에서 기능을 추가한다면 오버라이딩이고

자전거가 여러개 있는 상태에서 색깔만 바꾸고 싶다면 오버로딩이다.




===================================================================================

package jongkyu.menu;


public class Child extends Parent {

private String childMenu1 = "쇠고기청국장";//정보은닉을 위해 private로 선언을 했고 이때 getter과 setter을 안쓴이유는 메인에서 불러오는 역할만 할 꺼기 때문이다.

private String childMenu2 = "얼큰 된장국";//위와같음

private String childMenu3 = "콩나물국";//위와같음

public Child() {

}

/*

* 생성자 인데 생성자를 쓰는 이유부터 알아야 한다.

* 생성자 - 인스턴스를 생성하기 위한 특별한 메소드 라고 하는데

* ->생성자를 만들지 않아도 인스턴스를 생성 할 수 있다.

* 생성자를 만들어 주는 이유

* 1. 인스턴스 생성시 필드에 초기값으로 부여하기 위해서이다.

* 2. 인스턴스 생성에 필요한 초기화 명령을 실행하기 위해서이다.

* 생성자 작성 방법

* 1. 반환형을 사용하지 않는다. -> 값을 return 할 수 없다.

* 2. 생성자의 이름은 반드시 클래스명과 동일하게 작성한다.

* 3. 생성자는 오버로딩이 가능하다. -> 생성자는 여러개 선언 가능하다.

* 생성자를 선언하면 내부에 자동으로 선언된 기본생성자는 소멸

*/

public void main() {//난 이거를 Main클래스에서 불러오기 위해서 썼다.

System.out.println("기존메뉴");//기존메뉴로 부모클래스에서 갖고왔다.

menuPan();

/*

* 만약 menuPan() 이거를 System.out.println("부모메뉴"+menuPan으로 받고싶다면);

* public void menuPan()라는 부모 클래스에 이 메소드를 public String menuPan();

* 으로 바꾼후 return값을 ""이렇게 주면 된다. 직접 보기 위해 menuPan1();로 만들어보겠다.

*/

System.out.println("기존메뉴"+menuPan1());

/*

* menuPan1은 반환형이 String이므로 문자열로 값을 받기때문에 리턴값으로 ""을 줬다. 그렇게될경우 

* 어차피 출력문구가 있으므로 출력이 된다는 것이다.

*/

System.out.println("추가된메뉴");

childMenu();

}

public void childMenu() {

System.out.println(" === 아들추가메뉴 ===");

System.out.println(childMenu1);

System.out.println(childMenu2);

System.out.println(childMenu3);

}

}


----------------------------------------------------------------------------------------------------------------------------
package jongkyu.menu;

public class Parent {
private String menu1="청국장";
private String menu2="된장국";
private String menu3="갈비찜";
private String menu4="콩비지";


public void menuPan() {

System.out.println(" === 예전 메뉴 === ");
System.out.println(menu1);
System.out.println(menu2);
System.out.println(menu3);
System.out.println(menu4);


}
public String menuPan1() {

System.out.println(" === 예전 메뉴 === ");
System.out.println(menu1);
System.out.println(menu2);
System.out.println(menu3);
System.out.println(menu4);

return "";
}







}

---------------------------------------------------------------------------------------------------

package jongkyu.menu;


public class Main {

public static void main(String[] args) {


Child c = new Child();//Child 클래스에 있는걸 쓸것이며 c.으로 쓰겠다.

c.main();//Child클래스에 c.main이라는걸 불러온다.

}


}