자바의 상속과 예약어에 대해 알아볼께.

자바에 있어서 상속이라는 개념은 객체지향프로그래밍의 주요 특성인 모듈의 재사용성과 코드의 간결성을 제공하는 핵심적인 개념이야.

자바는 상속의 개념을 이용하여 클래스의 계층 구조 구성하는데 JDK에서 제공되는 클래스로부터 상속받아 자바 프로그램 작성하게 돼.

자바에서는 모든 클래스가 상위 클래스를 가지는데 모든 클래스의 최상위 클래스는 java.lang.Object 클래스야.

상속을 위해 상위 클래스를 지정하기 위해서는 ‘extends’라는 키워드를 사용하면 돼.

상속이 포함된 클래스 선언 형식은 아래와 같아.

[public/final/abstract] class 클래스이름 extends 상위클래스이름 {
	...
}

자바는 멤버 변수 역시 상속을 받을 수 있는데 관련해서는 아래의 예제들을 살펴보면 이해가 쉬울 것 같아.

class A {
	int aa = 1;
}

class B extends A {
	int bb = 2;
}

class C extends B {
	int cc = 3;
}

class Dabc {
	public static void main(String args[]) {
		C objc = new C();
		System.out.println("objc 객체의 객체속성변수 aa의 값은 " + objc.aa);
		System.out.println("objc 객체의 객체속성변수 bb의 값은 " + objc.bb);
		System.out.println("objc 객체의 객체속성변수 cc의 값은 " + objc.cc);
	}
}
class A {
	int i;
	private int j;

	void setij(int x, int y) {
		i = x;
		j = y;
	}
}

class B extends A {
	int total;

	void sum() {
		total = i + j;
		//에러 발생. private 타입의 변수 j를 하위 클래스에서 사용못함
	}
}

class Inheritance1 {
	public static void main(String args[]) {
		B subob = new B();
		subOb.sum();
	}
}
class B1 {
	int x;
}

class B2 extends B1 {
	String x;
}

class Inheritance2 {
	public static void main(String args[]) {
		B2 b2 = new B2();
		b2.x = "알기쉽게 해설한 자바";
		//B1 클래스에서 선언된 int x는 가려짐
		//만일 b2.x = 50을 넣으려고 하면 에러 발생

		System.out.println("객체 b2에 들어 있는 x 값 : " + b2.x);
		B1 b1 = new B1();
		b1.x = 5000;
		System.out.println("객체 b1에 들어 있는 x 값 : " + b1.x);

	}
}
//클래스 변수도 상속 가능
//하위 클래스에서 상위 클래스의 클래스 변수가 정의되면 상위 클래스의 변수가 가려짐
class C1 {
	static int x;
	static int y;
}

class C2 extends C1 {
	static String x;
}

class Inheritance3 {
	public static void main(String args[]) {
		C2.x = "알기쉽게 해설한 자바";
		//C1 클래스에서 선언된 int x는 가려짐
		C1.y = 20000;
		C1.x = 30000;

		System.out.println("클래스 변수 c2.x에 들어 있는 값 : " + c2.x);
		System.out.println("클래스 변수 c2.y에 들어 있는 값(C1으로부터 상속) : " + c2.y);
		System.out.println("클래스 변수 c1.x에 들어 있는 값 : " + c1.x);
	}
}

예약어 super

자바의 예약어인 super은 하위 클래스에 의해 가려진 상위 클래스의 멤버 변수나 메소드에 접근할 때 사용할 수 있어.

상위 클래스의 멤버 변수나 메소드에 접근하기 위한 사용식은 아래와 같아.

super.객체변수
super.메소드이름(매개변수)

두번째로 상위 클래스의 생성자를 호출할 때도 super를 사용할 수 있는데 아래와 같이 사용할 수 있어.

super(매개변수)

아래는 super을 사용하는 간단한 예제야.

class D1 {
	int x = 1000;

	void display() {
		System.out.println("상위 클래스 D1의 display() 메소드 입니다.");
	}
}

class D2 extends D1 {
	int x = 2000;

	void display() {
		System.out.println("하위 클래스의 D2의 display() 메소드입니다.");
	}

	void write() {
		this.display();
		super.display(); //상위 클래스(D1)의 display()를 실행
		System.out.println("D2 클래스의 객체 x 값은 : " + x);
		System.out.println("D1 클래스의 객체 x 값은 : " + super.x); //상위 클래스(D1)의 x값을 가져옴
	}
}

class InheritanceSuper {
	public static void main(String args[]) {
		D2 d = new D2();
		d.write();
	}
}

예약어 final

자바의 예약어 final은 3가지 용도로 사용할 수 있어. 첫번째로 상수로 사용될 객체 속성 변수로 사용할 수 있고 두번째로 메소드에 final을 붙여 하위 클래스에서 오버라이딩을 하지 못하게 만들 수도 있어.

마지막으로 클래스에 final을 붙여 해당 클래스가 하위 클래스를 가지지 못하게 할 수도 있지.

final을 사용하는 이유는 보안과 설계 부분을 명확히 하기 위해서야. 접근이 불필요한 메소드나 클래스에 final을 붙여 접근을 원천적으로 차단하는 거지.

Share This Post

Leave a Reply

Your email address will not be published. Required fields are marked *

Latest Post

  • Criss Cross Crossover Crunch Flutter Kicks Heel Touch Knees Up Crunch Legs Lower Plank Side Plank Superman Arms Up Crunch Aquaman Catch Dish Oblique Crunch
  • Businesses can survive by constantly generating revenue by selling goods or services. Companies that do not have sales or profit can not survive. So it
  • Amazon CEO Jeff Bezos sends letters to shareholders every year. This letter contains Amazon’s current achievements and future vision. He also enclose that the first
  • A middle-aged man came to Pastor Norman Vincent Peale one day to ask him for counseling. The dejected man told Pastor Norman Vincent Peale. “Pastor,
  • I have been working as an IT freelancer for over 10 years and have had a chance to work with various clients. Working freelance, I
  • CNBC analyzed the minutes of the Berkshire Hathaway shareholders’ meeting to find out why Warren Buffett could be an excellent investor. It is already known,
  • Good timing is like a good choice. So what is ‘good choice’? A good choice is to decide what you need to do first. That
  • We learned that in childhood we should brush our teeth immediately after eating rice. However, this is a common misconception in the days when common
  • In most cases, it is important for novice marketers to work efficiently by reducing the waste of work and increasing focus. He will not used
  • source: vornado.com The circulator is the abbreviated name for ‘air circulator’. The air circulator actually has a different purpose than the fan. Unlike a fan