JAVA _기초

[JAVA] Inheritance : 상속_03

Journey Jeong 2023. 2. 23. 13:07

 

< 복습 : 상속 01~02 >  

 

Inheritance : 상속

- 부모클래스의 멤버(필드, 메서드)를 자식클래스에서 사용가능 

- 자식 클래스가 부모클래스를 결정합니다.

       = public class Super{}

       = public class sub extends Super {} 

- 단일 상속만 지원한다. 

- 자식클래스의 생성자 내부에는 super() 생성자가 생략되어있다. 

 

** Override : 부모 클래스에 있는 메소드를 자식 클래스에서 재정의 하는 것 

                     - 단 , 클래스 vs 클래스에서는 선택적으로 적용이 가능함)

                     - 오버라이드 메서드인 경우  @Override 어노테이션을 적용해주는 것이 좋음 

 

** 다형성 : 상속 관계에서 다형성

               - 부모 객체 탙입으로 참조 변수 선언

               - 자식 객체를 생성해서 부모 참조변수에 대입

               - Super  super = new sub(); 

               - 부모클래스가 의미적으로 더 넓은 표현. 

 

 

< Inheritance : 상속 _ 03 > 

- 상속에서의 캐스팅 

package promotion;

class A{} //접근제한 package 로 생략되어있음 // 하나의 파일안에 여러개 클래스 생성 가능, 단 public은 하나만 
class B extends A{}
class C extends B{}
class D extends A{}
class E extends D{}

public class PromotionTest01 {
	
	public static void main(String[] args) {
		B b=new B();
		C c=new C();
		D d=new D();
		E e=new E();
		// 다형적 구현
		
		A ab=b; 
		B bb=(B) ab; // 캐스팅 필
		B bc=c; // c의 부모가 b이니까 가능 
		
		
		//A aa= new A();
		//B bbb=(B) aa;
		////////////////////
		// 공간 타입 
		// 컴파일러가 자동으로 해주는 자동캐스팅(프로모션) 
		long n= 10; 
		float num= n;
		// 공간타입이 value 타입보다 작으면 프로그래머한테 위임
		// 허용하려면 타입캐스팅 진행
		// (원하는타입)vaule : 강제 캐스팅 
		int m=(int)100L;
		
		
	}
	
}
package promotion;

class Animal{}
class Mammal extends Animal{}
class Dog extends Mammal{}
class Cat extends Mammal{}

public class PromotionTest02 {
	
	public static void main(String[] args) {
		// 연산자(명령어): instanceof
	
		Mammal m=new Mammal(); //A-M
		Dog d= new Dog();//A-M-D
		Cat c= new Cat();//A-M-C
		
		System.out.println(m instanceof Animal ); //true 
		System.out.println(d instanceof Mammal ); //true
		System.out.println(d instanceof Animal ); //true
		System.out.println(c instanceof Mammal ); //true
	
		Animal ab= new Mammal(); //A-M
		Mammal ma;
		System.out.println(ab instanceof Mammal);
		if( ab instanceof Mammal) {
			ma=(Mammal) ab;
			System.out.println("aa 캐스팅 가능");
		}
	}
}

 

 

*Abstaction

*Buffered 

package interfaces;

public interface BoardService {
	String WRITER= "관리자"; // 컨스턴스 필드 = 상수 필드= (static final)
	void write();
	void detail();
	void delete();
	void update();
	// 기능들을 만들 수 있음 // 추상메서드 
	
}
package interfaces;

public class BoardServiceProcess implements BoardService{

	@Override
	public void write() {
		System.out.println("글쓰기 처리 기능");
	}
	@Override
	public void detail() {
		System.out.println("게시글 삭제 처리");
	}
	@Override
	public void delete() {
		System.out.println("게시글 수정 처리");
	}
	@Override
	public void update() {
		System.out.println("게시글 상세조회 처리");
	}
}
package interfaces;

interface InterB{
	//인퍼페이스 안에는 추상메서드
	void printB();
	
}

interface InterC{
	void printC();
}
// 다중상속 가능 
public interface InterA extends InterB, InterC {
	void pirntA();

}

'JAVA _기초' 카테고리의 다른 글

[JAVA] Generic - 상속, 다형성, 추상화, 캐스팅  (0) 2023.02.28
[JAVA] 콜렉션(Collection)  (0) 2023.02.27
[JAVA] Inheritance : 상속_02  (0) 2023.02.22
[JAVA] Inheritance : 상속 _01  (0) 2023.02.21
[JAVA] Exceptions: 예외  (0) 2023.02.20