하나의 부모만 가질 수 있는 것이 단점이긴 하지만, 실제 부모 자식관계처럼 자식도 부모가 될 수 있는 것처럼 = 상속도 상속을 받은 자식이 부모로 될 수 있어 데이터를 전달해 줄수 있다.
즉, 부모 - 자식(부모) - 자식(부모)- 자식(부모) - 자식.... 이런식으로 가능하다.
public class Parent {
public String name;
int age;
private int money;
public Parent(){
System.out.println("부모 생성자 호출됨!");
}
public void print(){
System.out.println(name);
System.out.println(age);
System.out.println(money);
}
public void setMoney(int money) { //변수에 바로 접근을 못하게 하는 이유...
// 함수로 인해 내가 원하는 방식대로 변화하거나 제한하거나 추가를 할수있기때문이다.
// 변수에 직접적으로 값을 넣으면 막을수가 없다.
if(money < 0) {
this.money = 0;
}else {
this.money = money;
}
}
}
public class Child extends Parent{
//
/*
* name, age, money를 만들어서 사용 할려하는데,
* parent에서 선언한 변수가 존재한다. 중복된 변수가 존재하니 해당 클래스의 변수를 사용할 수 있도록 상속받자.
* */
String hobby;
public Child() {
System.out.println("자식 생성자 호출");
}
public void printChild() {
System.out.println(name);
System.out.println(money); //상속 받은 데이터인데, 엑세스 권한의 타입이 private라서 접근 할수가 없다.
//상속은 받았지만, 접근 권한이 없는 상황
//private란? 같은 클래스 내에서만 접근 할 수 있다.
}
/*
public void print(){
System.out.println(name);
System.out.println(age);
System.out.println(hobby);
}*/
//없어도 Parent에 있는 메서드가 존재하기에 따로 사용이 가능하다.
// 부모에게 물려 받은 함수이름을 그대로 사용하되,
// 나에게 맞는 코드로 변환해서 사용하는 방법
// 메소드 overriding (메소드 오버라이딩)
@Override
public void print() {
super.print(); // 상속 받은 부모의 함수를 사용할려면 super를 사용하자.
//spuer() 부모의 생성자 생성
//spuer.name 부모의 메개변수 접근
System.out.println(hobby);
}
}