반응형
츄르사려고 코딩하는 코집사입니다.
/**
* 상속을 이해하기 위한 소스 코드
* 상속 : 여러 클래스 사이에서 클래스의 역할의 중복되는 코드를 줄이기 위해 한 가지의 부모 클래스를 만들어 자식 클래스로 활용할 수 있게끔 만드는 것.
* 상속은 부모 클래스를 만들어 놓고, 자식 클래스를 만들 때 자식 클래스에 없는 것을 extends 부모클래스를 하여 오버라이딩
*
* 상속의 동작 과정
* 1. 자식 클래스의 객체가 만들어지는 과정은
* 2. 부모 클래스의 객체를 먼저 만들어 낸 후
* 3. 거기에 이어붙여서 자식클래스의 객체를 완성시킨다.
*
* super()는 부모클래스의 생성자를 호출
* 만약에 부모클래스의 생성자에 매개변수가 있으면, 명시적으로 부모클래스를 호출해줘야 한다.
* 부모클래스의 기본생성자가 없는 경우에는 자식클래스의 생성자에서 부모클래스의 생성자를 명시적으로 호출해줘야함.
*
* 다형성 : 하나의 변수가 여러 개의 형태를 가질 수 있는 것을 말함
* @author yong
*
*/
class Parent{
protected int data = 100;
//Parent의 생성자
public Parent() {
System.out.println("Parent의 생성자");
}
public void printInfo() {
System.out.println("Parent의 printInfo");
}
}
class Child extends Parent{
private int data = 200;
//Child의 생성자
public Child() {
System.out.println("Child의 생성자");
}
public void func(int data) {
System.out.println(data);
System.out.println(this.data); // 이 클래스의 데이터
System.out.println(super.data); // 부모클래스의 데이터
}
public void printInfo() {
System.out.println("Child의 printInfo");
}
}
public class Test {
public static void main(String[] args) {
//자식클래스의 객체를 만들 때는 부모클래스의 생성자가 호출이 된다.
//자식클래스로 객체를 만들 때는 부모클래스를 먼저 만들고, 부모 클래스로 먼저 객체를 찍어내고, 거기에 이어붙여 자식클래스를 찍어내어 완성한다.
Child c = new Child(); // Parent의 생성자 Child의 생성자 출력
c.func(10); // 10, 200, 100 출력
}
}
/**
* 다형성 : 하나의 타입의 변수가 여러 개의 형태를 가질 수 있는 것을 말함
*
* 다형성이 가능한 이유 : 부모 타입의 참조 변수가 자식 형태의 객체를 참조할 수 있음.
*
* 오버로딩 : 함수 이름은 같은데 매개변수의 유형과 갯수가 다른 것
* 오버라이딩 : 하위 클래스에서 재정의
* @author yong
*
*/
//아무것도 상속받지 않으면 아래의 Parent 클래스는
//class Parent extends Object로 자동으로 Default 된다.
class Parent{
protected int data = 100;
//Parent의 생성자
public Parent() {
System.out.println("Parent의 생성자");
}
public void printInfo() {
System.out.println("Parent의 printInfo");
}
}
class Child extends Parent{
private int data = 200;
//Child의 생성자
public Child() {
System.out.println("Child의 생성자");
}
public void func(int data) {
System.out.println(data);
System.out.println(this.data); // 이 클래스의 데이터
System.out.println(super.data); // 부모클래스의 데이터
}
public void printInfo() {
System.out.println("Child의 printInfo");
}
}
public class 다형성 {
public static void main(String[] args) {
//Parent p = new Parent();도 될 수 있다.
//Object p = new Child();도 될 수 있다.
Parent p = new Child();
//p.func(); 는 에러난다.
//p는 자식클래스에서 부모클래스 부분을 바라보기 때문에 그 부모클래스 부분에는 func()가 없다.
p.printInfo(); // Parent 클래스에 printInfo가 있어 가능
System.out.println(p.data); // 100 출력
}
}
반응형
'Language > Java' 카테고리의 다른 글
자바(Java) 스택(Stack) 클래스 및 예제 (0) | 2021.02.07 |
---|---|
자바(Java) Queue 클래스 및 예제 (0) | 2021.02.07 |
자바(Java) 이론/필기 문제 - 자바(Java) 마스터 가자! (0) | 2021.01.30 |
자바(Java)로 코딩테스트 할 때 활용할 API (0) | 2021.01.26 |
자바(Java) 재고 관리 프로그램 소스 (0) | 2021.01.22 |
자바(Java) 도서 관리 프로그램 최종 (0) | 2021.01.22 |
자바(Java) 도서 관리 프로그램 - (2) (0) | 2021.01.21 |
자바(Java) 도서 관리 프로그램 - (1) (0) | 2021.01.21 |
최근댓글