public class SampleParent /*extends Object*/{
/*
* 상속
* - 기존의 클래스를 물려받아 새로운 클래스를 만드는 것이다.
* - 자식클래스명 extends 부모클래스명{}
* - 부모 클래스의 생성자와 초기화 블럭을 제외한 모든 멤버를 물려받는다.
* - 하나의 클래스만 상속받을 수 있다.
* - 상속받지 않는 모든 클래스는 Object 클래스를 상속받는다
* - 자식 클래스는 부모 클래스의 멤버 외의 새로운 멤버를 가질 수 있으므로
* - 자식 클래스는 부모 클래스보다 크거나 같다.
* - 두개 이상의 클래스를 만드는데 공통된 멤버가 있는 경우 부모 클래스로 만든다.
*/
String var;
{
var = "초기화 블럭은 물려주지 않는다.";
}
SampleParent(){
var = "생성자도 물려주지 않는다.";
}
int method(int a, int b) {
return a + b;
}
}
public class SampleChild extends SampleParent {
void childMethod() {
// 상속받은 변수와 메서드를 사용할 수 있다.
System.out.println(var);// 상속받은 변수 0
System.out.println(method(7, 13)); // 상속받은 메서드 91
}
// 오버라이딩 부모클래스에서 상속받은 메서드의 내용을 변경하는 것
// super, super() 부모클래스의 생성자를 호출
// 다형성 a 객체, b 타입/ 객체와 타입이 다른 것
// 오버라이딩 : 상속받은 메서드의 내용을 재정의하는 것
// 똑같은 메서드를 만듦
@Override
// 어노테이션 : 클래스, 변수, 메서드 등에 표시해 놓는 것.
int method(int a, int b) { // 리턴타입 메서드명 파라미터 모두 같아야한다.
return a * b;
}
// super, super()
int var; //0
void test(double var) {
System.out.println(var);// 지역변수 :(입력값)
System.out.println(this.var);// 인스턴스변수 :0
System.out.println(super.var);// 부모클래스의 인스턴스 변수 :생성자도 물려주지 않는다.
// super : 부모 클래스의 메버와 자식 클래스의 멤버가 이름이 중복될 때
// 둘을 구분하기 위해 사용한다.
System.out.println(this.method(10,20)); //:200
System.out.println(super.method(10,20)); //:30
}
SampleChild() {
//super()는 맨 첫줄에 있어야함 안그러면 컴파일 에러 생김
super(); //부모 클래스의 생성자 호출 -> 부모 클래스에 있는 생성자를 초기화 하겠다는 의미 (=> 상속 받은 변수를 초기화 해주기 위해)
//super()를 통해 클래스의 생성자를 호출하고 부모클래스의 인스턴스 변수도 초기화한다.
//super()가 없으면 컴파일러가 자동으로 super()를 넣어준다.
}
public static void main(String[] args) {
SampleChild sc = new SampleChild(); // 객체 타입과 변수 타입이 일치
SampleParent sp = new SampleChild(); // 객체 타입과 변수 타입 불일치
// SampleChild2
// sp = new SampleChild2();
// SampleChild3
// sp = new SampleChild3();
// 부모 타입의 변수로 자식 타입의 객체를 사용하는 것이 다형성이다.
//서로 상속 관계에 있을 때에 사용 가능
sc.childMethod(); // 0, 91
System.out.println(sc.method(5, 10)); // 50
sc.test(8);
//부모와 자식간에는 서로 형변환이 가능하다.
sc = (SampleChild)sp;
sp = /*(SampleParent)*/sc;
//자식타입->부모타입 형변환은 생략할 수 있다.
// SampleChild sc2 = (SampleChild) new SampleParent();
//SampleParent는 2개의 멤버를 가지고 있다.
//SampleChild는 5개의 멤버를 가직 있다.
//SampleChild 타입의 변수는 5개의 멤버를 사용할 수 있어야하는데
//SampleParent 객체는 2개의 멤버만 가지고 있다.
//그러므로 부모타입의 객체를 자식 타입으로 형변환 하는 것은 에러를 발생시킨다.
//SampleParent 타입의 변수는
//SampleChild 객체를 가지고도 2개의 멤버만 사용할 수 있다.
sp = sc;
System.out.println(sp.var); //:생성자도 물려주지 않는다.
System.out.println(sp.method(3, 11)); // :33
}
}
'CODE > JAVA1' 카테고리의 다른 글
Abstract (0) | 2021.01.28 |
---|---|
ExtendsStore (0) | 2021.01.28 |
AccessModifier (0) | 2021.01.27 |
HairSalon (0) | 2021.01.27 |
RPG (0) | 2021.01.27 |