Back_End/Java

상속과 인터페이스

BaekSJ 2024. 4. 22. 16:15

상속 / 다형(유형)성 / 추상

  1. 상속 : 부모(super) 으로부터 물려받은 자원을 자식이 그대로 사용하거나 수정해서 사용 가능 키워드 : extends Java 는 한번에 하나의 클래스만 상속 가능
예)
 public class ParentClass{
 	int a=10;
 }

 public class ParentClass2{

 }
 가능
 public class ChildClass extends ParentClass{
 	char c='A';  /   private char c='A'
 }

 불가능
 public class ChildClass extends ParentClass, ParentClass2{

 }

 가능
 public class ChildClass2 extends ChildClass{
 	// int a=10;   char c='A';  클래스를 물려받는게 아닌 그 자원을 물려 받는 것
 	// private char c='A' 를 썼을 경우 char c='A' 물려받기 불가능
 	// 생성자는 물려 받지 못하고 이를 제외한 나머지를 물려받는 것
 }

 

  public class ParentClass2{
	  	public void test(){ }
	  }

	  public class ChildClass3 extends ParentClass2{
	  	// public void test(){ }    // 물려 받은 메서드를 그대로 받을 수도 있고,

	  	public void test(){
	  		/ System.out.print();   // 물려 받은 메서드 내부를 수정하는 것도 가능.
	  		// 부모로부터 물려받은 메서드 내용을 수정하는 기법 : Override
	  	 }
	  }

 


 

 

접근 제한자 : 외부 클래스가 현재 내 클래스 내부의 자원을 접근할 수 있는 범위를 설정 자원 : 변수 / 생성자 / method...

 

1. public : 가장 넓은 범위   -> 패키지가 다르더라고 import 하면 사용가능
2. default : 동일 패키지 내부에서만
3. protected : 자식까지
4. private : 내 클래스 내에서만...

 


💡상속의 사용 시기는 언제일까?

  • 메모리 효율을 위해 상속을 사용, 동일 코드를 다시 개발하기 싫을 때!

 

상속 순서

예) public class ParentClass{	// ParentClass.class
	input a=10;
	public ParentClass(){
	 }
	}
									new ParentClass()
	public class ChildClass extends ParentClass{	// ChildClass
		private char='A';
		public ChildClass();
		}
	}

 


 

interface : 코드의 유연성(주로 객체저장) / 메서드에 대한 다형성

1. interface 클래스 선언 방법
  public interface 클래스명{

  }

2. interface 클래스 구성
 상수 선언		 //	int a=10;               <> final int a=10;
 메서드명만 선언 // public void sum();		<> public abstract void sum();
 변수 선언 x
 생성자 x
 --> 단독적으로 사용하는 것이 아니라, 다른 클래스에 의해 구현되어 사용한다
 	객체 생성불가!!!

 예)
 public interface A{
 }
 public interface B{
 }
 public interface C{
 }

 public class Test implements A{
 }
 public class Test implements A, B, C{
 }

 interface 끼리는 다중 선언 가능
 public interface D extends A, B, C{
 }

 


 

클래스의 구성요소

 

1. 일반 클래스

일반클래스 구성요소
1. 변수
2. 상수
3. 생성자
4. 메서드
  추상메서드 선언 불가능!!! public void sum();

 

2. 추상 클래스

추상클래스 구성요소
1. 변수
2. 상수
3. 생성자 : new ~~(); 단독 객체 생성은 불가!!!
4. 메서드
5. 추상메서드 선언 가능!! public void sum();

 

=> 추상클래스 = 일반클래스 + interface

 

추상클래스 선언 : abstract 키워드가 필요