Hyogi's Notebook

Day05 JAVA Studying

by 효기’s

    상속
 *  자바는 100프로 상속구조.
 *  클래스명 extends 상속받는 클래스명.
 *  상속 해주는 클래스 super class
 *  상속 받는 클래스 sub class
 *  코드의 확장. 재사용성, 유지보수의 효율을 높인다.
 *  is ~ A 관계
 *  객체간 다중상속을 허용하지 않는다. 단일상속만 가능
 *  명확하다.
 *  
 *  오버라이딩 -> 다형성
 *  
 *  부모의 메소드중 하나를 자식클래스에서 재정의 (부모에게 상속받은게 맘에 안들때 바꾸고싶을때 사용)
 *  부모의 내용을 변경, 추가해서 사용할수 있게 해준다.

 

예제

/*
 * 상속
 * 	자바는 100프로 상속구조.
 *  클래스명 extends 상속받는 클래스명.
 *  상속 해주는 클래스 super class
 *  상속 받는 클래스 sub class
 *  코드의 확장. 재사용성, 유지보수의 효율을 높인다.
 *  is ~ A 관계
 *  객체간 다중상속을 허용하지 않는다. 단일상속만 가능
 *  명확하다.
 *  
 *  오버라이딩 -> 다형성
 *  
 *  부모의 메소드중 하나를 자식클래스에서 재정의 (부모에게 상속받은게 맘에 안들때 바꾸고싶을때 사용)
 *  부모의 내용을 변경, 추가해서 사용할수 있게 해준다.
 *  
 */

package test;

class Inher{
	   // 인스턴스 변수 a, b
	   private int a;
	   private int b;
	   
	   // 기본 생성자
	   public Inher() {
	      System.out.println("super class");
	   }
	   // 인자를 받는 생성자
	   public Inher(int i) {
	      System.out.println("super11 class");
	   }
	   // getter setter
	   public int getA() {
	      return a;
	   }
	   public void setA(int a) {
	      this.a = a;
	   }
	   public int getB() {
	      return b;
	   }
	   public void setB(int b) {
	      this.b = b;
	   }
	   
	   
	}

	public class study31_0707 extends Inher{
	   
	   // 기본 생성자
	   public study31_0707() {
	      //super(); //=> 부모의 생성자 호출, subclass의 생성자함수의 첫번째라인에 항상 존재
	      super(10);// 인자를 받는 생성자 호출
	      System.out.println("sub class");
	   }
	   
	   public static void main(String[] args) {
		   study31_0707 in = new study31_0707();
	      
	      in.setA(100);
	      
	      System.out.println(in.getA());
	   }
	}
package test;

class AC {
	private int a; // 인스턴스 변수 a
	
	public AC(int a) { // 생성자 (constructor)
		this.a = a;
	}
	// getter (값을 가져온다.)
	public int getA() {
		return a;
	}
	
	// 인스턴스 메서드
	public void disp() {
		System.out.println("하하하");
	}
	
}

class B extends AC{
	private int b;
	public B(int a, int b) {
		super(a); // ac 생성자 호출
		this.b = b; // b를 초기화 (변수 구분할때)
	}
	public int getB() { // 메서드
		return b; // 인스턴스 변수 b
	}
}
class C extends B{
	private int c; //정수형 인스턴스 변수 c
	
	public C(int a, int b, int c) {
		super(a,b); // 생성자를 호출
		this.c = c; // c를 초기화 this는 변수 구분때문에 
	}
	public int getC() {
		return c; // 인스턴스 변수 c의 값을 반환
	}
	
	@Override // 부모클래스의 disp()메서드를 오버라이딩 한다.
	public void disp() {
		super.disp();
		System.out.println("호호호");
	}
}



public class study32 {
	public static void main(String[] args) {
		
		//동적 바인딩
		C cc = new C(1,2,3); //정적 바인딩: 부모의 레퍼런스로 자식을 사용
		
		
		System.out.println(cc.getA());
		System.out.println(cc.getB());
		System.out.println(cc.getC());
		cc.disp();

		
		
	}
}

'Studying > JAVA' 카테고리의 다른 글

Day07 JAVA Studying  (19) 2023.07.11
Day06 JAVA Studying  (1) 2023.07.10
Day04 JAVA Studying  (0) 2023.07.06
Day03 JAVA Studying  (0) 2023.07.05
Day02 JAVA Studying  (0) 2023.07.04

블로그의 정보

감성 개발자 효기

효기’s

활동하기