티스토리 뷰

클래스와 다형성

다형성 : 프로그램 언어의 각 요소들이 다양한 자료형에 속하는 것이 허가되는 성질.
단형성 : 프로그램 언어의 각 요소들이 한가지 자료형만 가지는 성질.

단형성을 갖는 자료형 : bool, char, short, int, long, float, double 등

다형성을 갖는 자료형 : var(JavaScript), Python의 변수, 상속 관계의 Class 등

 

상속(Inheritance)
 : 코드 중복을 줄이기 위해 한 클래스가 다른 클래스에 정의 된 변수나 함수를 이어받아 그대로 이용하는 것.

이때 상속은 자식 클래스 → 부모 클래스의 방향으로만 이루어지며, 한 번에 한 부모에게만 상속이 가능하다.

class Animals{};			// 부모 클래스
class Dogs extends Animals{};		// 자식 클래스

위와 같은 코드로 상속이 가능하다.

이러한 상속을 이용하여 부모 클래스의 함수들을 이용할 수 있다.

또한 이러한 상속 관계에서는 두 가지 캐스팅 방법을 사용할 수 있다.

class NP{};
class P extends NP{};
NP non_poly = new P();		// Up-Casting
P poly = new P();
poly = (P)non_poly;		//Down-Casting

위의 예시에서

Up-Casting : non_poly; P클래스의 객체가 부모 클래스인 NP 클래스로 높여져 형 변환이 됨.

Down-Casting : poly; NP클래스의 객체로 업캐스팅된 non_poly는 본래 P 클래스이므로, 자식 클래스로 변환 후 대입. 

 

또한 이러한 상속 관계를 확인하기 위해 JAVA에서는 instanceof라는 연산자를 사용할 수 있다.

class NP{};
class P extends NP{};

NP np1 = new NP();
NP np2 = new P();
P p = new P();

System.out.println(np1 instanceof NP);		// true
System.out.println(np1 instanceof P);		// false
System.out.println(np2 instanceof NP);		// true
System.out.println(np2 instanceof P);		// true
System.out.println(p instanceof NP);		// true
System.out.println(p instanceof P);		// true
  1.  np1은 NP의 객체이기 때문에 NP에 속하므로 true.
  2.  np1은 NP의 객체이며, P와 연관이 없기 때문에 false.
  3.  np2는 NP의 객체이기 때문에 NP에 속하므로 true.
  4.  np2는 NP의 객체이지만 본래 P 클래스의 객체였으므로 P에 속함. 때문에 true.
  5.  p는 NP에 extends된 객체이므로 NP와 상속 관계. 때문에 true.
  6.  p는 P의 객체이기 때문에 P에 속하므로 true.

이러한 다형성을 배열로도 활용이 가능하다.

abstract class OS		// 추상 클래스; 무조건 오버라이딩 해야하는 메소드를 가진 클래스
{
	abstract void info();
};
class Linux extends OS
{
	public void info(){ System.out.println("OS : Linux"); }
};
class Windows extends OS
{
	public void info(){ System.out.println("OS : Windows"); }
};
class Mac extends OS
{
	public void info(){ System.out.println("OS : Mac"); }
};

public class Main
{
	public static void main(String[] args)
	{
	OS o[] = {new Linux(), new Windows(), new Mac()};
	for(OS system : o)
		{
			system.info();
		}
	}
}

/* output
OS : Linux
OS : Windows
OS : Mac */

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함