프로그래밍 언어/Java

[JAVA] #OOP특성 #상속 #다형 #은닉 #캡슐화 #캐스팅 #오버라이딩

반응형
class Mother{
	String name;	
	Mother(String name){
		this.name = name;
	}
	void action() {
		System.out.println("cooking");
	}
}

class Son extends Mother{
	Son() {
		super("아들");
		System.out.println("new Son: "+name);
	}
/*	void action() {
		System.out.print("Son action overriding: ");
		System.out.println("Soccer play");
	}
*/	
}
class Daughter extends Mother{
	Daughter() {
		super("딸");
		System.out.println("new Daughter: "+name);
	}
	void action() {
		System.out.print("Daughter action overriding: ");
		System.out.println("Doll play");
	}
	
}
public class AUser1 {
	public static void main(String[] args) {
		Mother mother = new Mother("엄마");
		mother.action();
		System.out.println();
		
		Son son = new Son();
		son.action(); //mother.action method call
		System.out.println();
		
		Daughter daughter = new Daughter();
		daughter.action(); //overriding method call (Daughter.action call)
		System.out.println();
		
		Mother littleMom = daughter; //Implicit Type Casting
		littleMom.action(); //overriding method call (Daughter.action call)
		System.out.println();
		
		//Son sSon = (Son) mother;
		//sSon.action();
		
		Daughter sDaughter = (Daughter) littleMom; //Explicit Type Casting
		sDaughter.action();
		System.out.println(sDaughter.name);
	}
}

OOP(Object Oriented Programming)의 특성
this : 자기자신의 객체 의미 [대명사]
super : 부모의 객체 의미 [대명사]

(1)상속성(Inheritance) ?
부모의 '모든 것'을 자식에게 '상속 받는 것'

-'자식객체'가 생성되며 먼저 '부모객체'가 생성되어야 한다.
-JVM이 기본생성자(default constructor)를 만들어 준다(다른 생성자가 하나도 없을 때만)
-모든 생성자의 첫 라인에는 super();가 생략되어 있다. (단, 다른 super(...)가 있다면 예외)
-부모 메소드의 내용을 자식에서 바꿀 수 있다. (Overriding)
-모든 객체는 Object 자식 (묵시적 상속)
-형변환은 상속관계에서만 가능
          >자동 형변환 by JVM (자식>부모)
                   >>업 캐스팅
          >강제 형변환 by 개발자 (부모>자식)
                  >>다운 캐스팅
:daughter >> mother >> daughter 은 가능하지만, daughter >> mother >> son은 불가능하다.
다운캐스팅은 반드시 전제가 있어야 한다. 업캐스팅 하기전의 타입으로 캐스팅 되는것
-형제관계는 남남과 같다.

(2)다형성(Polimorphism) ?
같은 타입의 객체의 '같은 메소드'가 다른 일을 하는 특성 == 오버라이딩, 형변환

(3)은닉성(Information Hiding) ?
외부 객체로부터 '속성값(데이터)'을 감추는 특성
:다른 클래스의 private String str = "은닉성";은 getter, setter를 통해서 접근이 가능하다.

(4)캡슐화(Encapsulation)
메소드나 생성자의 일의 내용을 알 필요없이, 그 형태(이름/파라미터/리턴타입)만 알면 호출해서 사용할 수 있는 특성

 

 

 

반응형