Inheritance (상속)
기존의 클래스를 재활용하여 새로운 클래스를 작성하는 법 / 상위(부모)클래스, 하위(자식)클래스로 나뉜다.
Parent 클래스 (부모)
package ex1_inheritance;
//상속 : 부모나 조상의 재산의 전부나 일부를 자손이 물려받는 것
//자바도 부모자식관계 존재하며 재산을 물려받을 수 있도록 되어있다
public class Parent { //부모, 기반, 슈퍼 클래스
//객체의 재사용성 뿐만 아니라 코드의 간결성도 제공
int money = 200000000;
String str = "강남";
}
Child 클래스 (자식)
package ex1_inheritance;
public class Child extends Parent{
//자식 클래스는 부모 클래스의 자식임을 명시하는 extends 키워드 사용
String car = "아반떼";
}
Main 클래스
package ex1_inheritance;
public class ExtendsMain {
public static void main(String[] args) {
Child c1 = new Child();
System.out.println(c1.car);
//Child 클래스 객체 c1은 Parent 클래스를 상속받았으므로
//부모로부터 상속받은 money, str등 속성을 사용할 수 있다.
System.out.println(c1.money);
System.out.println(c1.str);
//부모 클래스는 자식 클래스의 속성을 사용할 수 없다
Parent p1 = new Parent();
//System.out.println(p1.car);
//instanceof 연산자
//객체명 instanceof 클래스명
//객체가 해당 클래스의 타입이면 true 아니면 false
if(c1 instanceof Parent) {
System.out.println("c1은 Parent 타입입니다.");
}
if(c1 instanceof Child) {
System.out.println("c1은 Child 타입입니다.");
}
//자바의 상속의 특징
//한명의 자녀가 두명의 부모를 갖는건 불가
//한명의 부모가 여러명의 자녀를 갖는건 가능
//상속관계의 최상위에는 object
//object는 모든 타입을 받아들일 수 있는 최상위 객체
}
}
Animal 클래스 (부모)
package ex2_animal;
public class Animal {
private int eye = 2, leg = 4;
public int getEye() {
return eye;
}
public int getLeg() {
return leg;
}
}
Cat 클래스 (자식1)
package ex2_animal;
public class Cat extends Animal{
//eye, leg를 Animal 클래스에서 상속받음
String cute = "귀엽다";
}
Lion 클래스 (자식2)
package ex2_animal;
public class Lion extends Animal{
String galgi = "갈기가 풍성하다";
}
Snake 클래스 (자식3)
package ex2_animal;
public class Snake extends Animal{
//메서드 오버라이드(라이딩) : 메서드의 재정의
//상속관계의 객체에서 부모의 메서드를 자식이 가져와 사용하되
//내용만 자식의 상황에 맞게 재정의 하고 나머지는 똑같아야한다
//접근제한은 부모것보다 넓은 범위에서 사용 가능
@Override
public int getLeg() {
// TODO Auto-generated method stub
return 0;
}
String sensor = "감각이 좋다";
}
Main 클래스
package ex2_animal;
public class AnimalMain {
public static void main(String[] args) {
Cat cat = new Cat();
System.out.printf("고양이\n");
System.out.printf("눈 : %d\n",cat.getEye());
System.out.printf("다리 : %d\n",cat.getLeg());
System.out.printf("특징 : %s\n\n",cat.cute);
Lion lion = new Lion();
System.out.printf("사자\n");
System.out.printf("눈 : %d\n", lion.getEye());
System.out.printf("다리 : %d\n", lion.getLeg());
System.out.printf("특징 : %s\n\n", lion.galgi);
Snake snake = new Snake();
System.out.printf("뱀\n");
System.out.printf("눈 : %d\n", snake.getEye());
System.out.printf("다리 : %d\n", snake.getLeg());
System.out.printf("특징 : %s\n\n", snake.sensor);
}
}
Override (오버라이드) / Overriding (오버라이딩)
부모 클래스로부터 상속받은 메서드를 자식 클래스에서 재정의하여 사용하는 것
Calculator 클래스 (부모)
package ex3_override;
public class Calculator {
public int getResult(int n1, int n2) {
return -1;
}
}
CalPlus 클래스 (자식1)
package ex3_override;
public class CalPlus extends Calculator{
@Override
public int getResult(int n1, int n2) {
return n1+n2;
}
}
CalMinus 클래스 (자식2)
package ex3_override;
public class CalMinus extends Calculator{
@Override
public int getResult(int n1, int n2) {
return n1-n2;
}
}
Main 클래스
package ex3_override;
import java.util.Scanner;
public class CalMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.printf("첫번째 숫자 입력 : ");
int n1 = sc.nextInt();
System.out.printf("두번째 숫자 입력 : ");
int n2 = sc.nextInt();
CalPlus cp = new CalPlus();
CalMinus cm = new CalMinus();
System.out.printf("CalPlus : %d\n", cp.getResult(n1, n2));
System.out.printf("CalMinus : %d\n", cm.getResult(n1, n2));
sc.close();
}
}