프로그래밍 언어/JAVA

[JAVA] 자바의 상속 Inheritance

Rateye 2021. 1. 18. 14:32
728x90
반응형

[JAVA] 상속 Inheritance

  • 슈퍼클래스(부모클래스, 상위클래스)가 가진 멤버(변수, 메서드)를 서브클래스(자식클래스, 하위클래스) 물려받아 선언없이 사용할 수 있도록 하는 것
  • 서브클래스를 정의할 때 물려받을 슈퍼클래스를 지정하여 표현
  • is-a 관계라고도 함
  • 상속을 통해 슈퍼클래스의 멤버를 물려받기 때문에 직접 메서드 또는 변수를 생성할 필요가 없어서 코드 중복 최소화됨 또한, 슈퍼클래스의 멤버를 수정하면 서브클래스에는 슈퍼클래스에서 수정된 내용이 그대로 적용되므로 유지보수가 용이

상속 적용 기본 문법

class 서브클래스명 extends 슈퍼클래스명 {}
// 슈퍼(부모) 클래스 정의
public class Parent {
	
	public void parentPrn() {
		System.out.println("슈퍼클래스의 parentPrn()");
	}
	
}
// 서브(자식)클래스 정의
// => 슈퍼(부모)클래스인 Parent 클래스를 상속받기 위해
//    클래스명 뒤에 extends 키워드를 쓰고, 슈퍼클래스 이름을 명시한다!
public class Child extends Parent {

	public void childPrn() {
		System.out.println("서브클래스의 childPrn()");
		
		
		// Has-a 관계 예시
//		Parent p = new Parent();
//		p.parentPrn();
	}
	
}
		// Child 클래스 인스턴스 생성
		Child c = new Child();
		// Child 인스턴스를 통해 접근 가능한 메서드 : 2개 
		c.childPrn(); // 서브클래스에서 직접 정의한 메서드
		c.parentPrn(); // 슈퍼클래스로부터 상속받은 메서드
		
		System.out.println("---------------------------");
		
		// IronMan 인스턴스 생성
		IronMan i = new IronMan();
		// IronMan 인스턴스를 통해 접근 가능한 멤버 : 5개
		// IronMan 클래스(서브클래스)에서 직접 정의한 메서드 - 2개
		i.fly();
		i.shootBeam();
		
		// Person 클래스(슈퍼클래스)로부터 상속받은 메서드 - 2개
		i.eat();
		i.jump();
		
		// Person 클래스(슈퍼클래스)로부터 상속받은 멤버변수 - 1개
		i.name = "토니 스타크";
		System.out.println("이름 : " + i.name);
		
		// SpiderMan 클래스 인스턴스 생성 및 변수와 메서드 접근
		SpiderMan s = new SpiderMan();
		s.name = "피터 파커";
		System.out.println("이름 : " + s.name);
		s.eat();
		s.jump();
		s.fireWeb();
		
		System.out.println("========================");
		
		// 할아버지 클래스의 인스턴스 생성
		// 접근 가능한 멤버 : 2개
		System.out.println("---- 할아버지 ----");
		할아버지 할아버지 = new 할아버지();
		System.out.println(할아버지.house); // 직접 선언한 변수 
		할아버지.singWell();                // 직접 정의한 메서드
		System.out.println("------------------");
		
		System.out.println("---- 아버지 ----");
		// 아버지 클래스의 인스턴스 생성
		// 접근 가능한 멤버 : 4개(아버지 2개 + 할아버지 2개)
		아버지 아버지 = new 아버지();
		System.out.println(아버지.car); // 직접 선언한 변수
		System.out.println(아버지.house); // 할아버지로부터 상속받은 변수
		아버지.drawWell(); // 직접 정의한 메서드
		아버지.singWell(); // 할아버지로부터 상속받은 메서드
		
		System.out.println("------------------");
		System.out.println("---- 나 ----");
		// 나 클래스의 인스턴스 생성
		// 접근 가능한 멤버 : 6개(나 2개 + 아버지 2개 + 할아버지 2개)
		나 나 = new 나();
		System.out.println(나.pc);
		System.out.println(나.car);
		System.out.println(나.house);
		나.programmingWell();
		나.drawWell();
		나.singWell();

 

728x90
반응형