
- 상속을 하려면 다형성을 꼭 지켜야한다.
다형성
: 하나의 유형의 이름이 여러가지로 불릴 수 있는 것 왕은 왕이기도 하지만 판사이기도 하다.
- 상속이란 두 개의 클레스를 연결 시켜주는 것을 얘기하는데 사용 방법으로는 연결 받을 클레스 명 뒤에 extends 연결 될 클레스 명 이렇게 작성하는 것이 문법이다.
package ex05;
class Shape {
int x,y;
public Shape(){
System.out.println("Shape 생성됨");
}
}
class Circle extends Shape{
int radius;//반지름
public Circle(int radius) {
System.out.println("Circle 생성됨");
this.radius = radius;
System.out.println("1");
super.x = 0;/// 부모 shpae의 멤버를 자식 메서드에서 사용하려면 super.을 붙이고 멤버를 입력
super.y = 0;
}
double getArea(){
return 3.14 * radius * radius;
}
}
public class CircleTest {
public static void main(String[] args) { //부모의 디폴트 생성자가 먼저 출력됨.
Circle circle = new Circle(10);
}
}
묵시적인 호출
로는 원래는 상속 받을 클레스 내부에 super를 넣어줘야 되지만, 붙이지 않더라도 기본 생성자 처럼 코드에서는 보이지 않지만 자동으로 만들어준다.
단 오류
가 발생하는 경우는 상속해줄 클레스 에서 매개변수가 있는 생성자를 하나만 만들어줄 경우에는 오류가 발생한다. 메서드 오버라이딩
재정의
:상속 받은 멤버의 내용을 상속받는 클레스에 주제에 맞게 바꾸는 것
단 메서드 이름이랑 매개변수는 동일 해야 한다.
Override
기각 시키다, 무효화하다.
동적바인딩
부모 메소드를 override
하면서 자식꺼를 띄우는 것을 얘기한다.
추상화
:abstract를 붙이면 추상화가 되어 object에 해당 되지않으며, 상속 받는 객체가 재정의 할 때(alt+inst 후 아래 토글 참고)문법상 메서드명이 동일하지 않으면 자바에서 잡아준다.
그러므로 실수를 안만들기 위해 사용한다.재정의 문법


package ex06.example5;
abstract class 판사 { // abstract를 붙이면 추상화가 되어 object에 해당되지 않으며
// heap메모리에 띄우려면 상속을해서 띄울 수 있다.
public abstract void 심문();
}
abstract class 증인 {
public abstract void 대답();
}
class 왕 extends 판사 {
public void 심문() {
System.out.println("왕은 심문한다");
}
}
class 왕비 extends 판사 {
public void 심문() {
System.out.println("왕비는 심문한다");
}
}
class 모자장수 extends 증인 {
public void 대답() {
System.out.println("모자장수는 대답한다");
}
}
class 토끼 extends 증인 {
public void 대답() {
System.out.println("토끼는 대답한다");
}
}
class 엘리스 extends 증인 {
@Override
public void 대답() {
System.out.println("엘리스는 대답한다");
}
}
class 호랑이 extends 증인 {
public void 대답() {
System.out.println("호랑이는 대답한다");
}
}
class 고양이 extends 증인 {
@Override
public void 대답() {
System.out.println("고양이는 대답한다");
}
}
class Game {
public void 심문(판사 u1) {
u1.심문();
}
public void 대답(증인 u1) {
u1.대답();
}
}
public class AliceApp {
public static void main(String[] args) {
왕비 u1 = new 왕비();
모자장수 u2 = new 모자장수();
왕 u3 = new 왕();
토끼 u4 = new 토끼();
엘리스 u5 = new 엘리스();
호랑이 u6 = new 호랑이();
고양이 u7 = new 고양이();
Game game = new Game();
game.심문(u3);
game.대답(u7);
}
}
객체지향 2: 오브젝트를 추상화 시켜서 만든다.(상속해서 만든다.)
Share article