자바 객체의 형변환과 추상 클래스, 추상 메소드에 대해 알아볼께.

객체의 형변환

자바는 상속 관계의 클래스에서 객체의 형 변환이 가능해. 아래의 예제들로 객체의 형 변환에 대해 알아볼께.

class Acast {
	int a = 1;
}

class Bcast extends Acast {
	int b = 2;
}

class Ccast extends Bcast {
	int c = 3;
}

class TestCasting {
	public static void main(String args[]) {
		Acast refA; //Acast 타입의 객체 refA를 선언
		//Acast 타입의 객체 참조 변수 refA에 Ccast 클래스의 객체를 생성하여 할당
		//상속관계가 아니라면 에러 발생
		refA = new Ccast();
		System.out.println("refA.a의 값은 " + refA.a);
	}
}
//에러 발생의 예1
class Acast {
	int a = 1;
}

class Bcast extends Acast {
	int b = 2;
}

class Ccast extends Bcast {
	int c = 3;
}

class TestCasting {
	public static void main(String args[]) {
		Acast refA; //Acast 타입의 객체 refA를 선언
		//Acast 타입의 객체 참조 변수 refA에 Ccast 클래스의 객체를 생성하여 할당
		//상속관계가 아니라면 에러 발생
		refA = new Ccast();
		System.out.println("refA.a의 값은 " + refA.c); //Ccast 클래스의 멤버인 c에 접근을 시도하여 에러 발생
	}
}
//에러 발생의 예2
class Acast {
	int a = 1;
}

class Bcast extends Acast {
	int b = 2;
}

class Ccast extends Bcast {
	int c = 3;
}

class TestCasting {
	public static void main(String args[]) {
		Ccast refC = new Acast(); //에러 발생
		System.out.println("refC.a의 값은 " + refC.a);
	}
}
class A {
	void callme() {
		System.out.println("클래스 A의 callme() 메소드 실행");
	}
}

class B extends A {
	void callme() { //오버라이딩 된 메소드
		System.out.println("클래스 B의 callme() 메소드 실행");
	}
}

class C extends A {
	void callme() {
		System.out.println("클래스 C의 callme() 메소드 실행");
	}
}

class OverridingCast {
	public static void main(String args[]) {
		A r = new A();
		r.callme();
		r = new B();
		r.callme();
		r = new C();
		r.callme();
	}
}

추상 클래스와 추상 메소드

자바의 추상 클래스는 하위 클래스에서 구현될 추상적인 기능만을 추상 메소드로 선언한 클래스야. 그리고 기능이 무엇(what)인지만을 선언하고 구현 부분이 없는 메소드를 추상 메소드라고 하지.

추상 메소드는 하위 클래스에서 오버라이딩되어 구현이 되고 추상 클래스는 추상 메소드 외에도 일반적인 속성과 메소드를 가질 수 있어.

추상 메소드는 아래와 같은 표현식으로 구현될 수 있어.

abstract class 클래스 이름 {
	... //일반 속성과 메소드 기술
	abstract void 추상메소드이름(); //추상 메소드 선언
	...
}

아래는 추상 클래스와 추상 메소드를 구현한 예제야.

abstract class shape { //추상 클래스 선언
	abstract void draw(); //구현(body) 부분이 없는 추상 메소드를 정의
}

class Circle extends shape {
	void draw() {
		System.out.println("원을 그리는 기능");
	}
}

class Rectangle extends Shape {
	void draw() {
		System.out.println("사각형을 그리는 기능");
	}
}

clas Triangle extends Shape {
	void draw() {
		System.out.println("삼각형을 그리는 기능");
	}
}

class AbstractClass {
	public static void main(String args[]) {
		Circle c = new Circle();
		c.draw();

		Rectangle r = new Rectangle();
		r.draw();

		Triangle t = new Triangle();
		t.draw();

		System.out.println("===객체 형변환과 오버라이딩을 이용===");

		Shape  s = new Circle(); //상위 클래스의 객체에 하위 클래스의 객체를 대입
		s.draw(); //draw() 메소드 호출

		s = new Rectangle();
		s.draw();

		s = new Tringle();
		s.draw();

	}
}

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