보안 전공생의 공부

상속, 다형성, 추상 클래스 본문

Language/JAVA

상속, 다형성, 추상 클래스

수잉 2021. 2. 14. 13:48

(참조 :  wikidocs.net velog.io/@foeverna/Java )

 

상속 : 부모가 자식에게 물려주는 것

부모 클래스 (Animal.java)
자식 클래스(Pig.java)

extends

자식클래스 extends 부모클래스 : 자식클래스가 부모클래스를 상속함

 

Pig 클래스에 객체변수 name과 메소드 setName 을 만들지 않았지만

Animal 클래스를 상속받았기 때문에 사용 가능 

실행결과

 

자식 클래스 - Pig.java

Pig 클래스에 메소드 sleep을 추가하는 것도 가능하다.

실행결과

=>자식 클래스는 부모 클래스의 기능 뿐만 아니라 더 많은 기능을 갖도록 설계될 수 있다.

 

 

IS-A 관계

 

Pig 클래스는 Animal 클래스의 상속을 받음 => Pig는 Animal의 하위 개념

자바는 이러한 관계를 IS-A 관계라고 표현함

Pig is a Animal

 

이렇게 IS-A 관계(상속관계)에 있을 때 자식 객체부모 클래스의 자료형인 것처럼 사용가능

Animal pig = new Pig();

 

 

메소드 오버라이딩(method overriding)

 : 부모클래스의 메소드를 자식클래스가 동일한 형태로 또다시 구현하는 행위

HousePig.java

Pig 클래스를 상속받은 HousePig 클래스이다.

첫번째에서는 Pig 클래스의 sleep 메소드를 구현하였다.

 

두번째에서는 Pig 클래스와 동일한 형태의 sleep메소드를 구현하였다.

우선순위 : HousePig 클래스의 sleep 메소드 > Pig 클래스의 sleep 메소드

=> 호출시 HousePig 클래스의 sleep 메소드가 호출됨

 

 

메소드 오버로딩(mehtod overloading)

 : 입력항목이 다른 경우, 동일한 이름의 메소드를 만들 수 있음

이미 있는 메소드 sleep과 동일한 이름의 sleep 메소드를 또 생성하였다.

새로 마든 sleep 메소드는 입력항목으로 int 자료형 hour을 추가했다.

 

첫번째 호출한 sleep -> sleep() 메소드 호출

두번째 호출한 sleep -> sleep(int hour) 메소드 호출

 

다중상속 : 한 클래스가 동시에 하나 이상의 클래스를 상속 받는 것

    ※ 자바는 다중상속을 지원하지 X

 

다형성(ploymorphism) 

 : 하나의 코드가 여러 자료형으로 구현되어 실행되는 것 -> 같은 코드에서 여러 실행 결과가 나올 수 있음

   객체지향 프로그래밍의 유연성, 재활용성, 유지보수성에 기본이 되는 특징 !

Animal.java

클래스 Animal 안에 animalMove라는 메소드를 만들고,

Animal 클래스를 상속받는 3개의 클래스 Human, Tiger, Eagle 을 추가했다.

 

각각의 클래스에 맞게 animalMove 메소드를 오버라이딩했다.

AnimalMove.java

AnimalMove 클래스에 생성한 3개의 하위클래스(Human, Tiger, Eagle)을 생성한다.

moveAnimal 메소드를 작성하고, 매개변수를 Animal 타입으로 해서 animalMove 메소드를 실행하도록 한다.

 

AnimalMove의 인스턴스 test를 생성한 후 

각각의 하위 클래스를 매개변수로 해 moveAnimal을 실행한다.

=> 같은 메소드에서 서로다른 출력값이 나옴

=> 하나의 코드가 다양한 구현 실행 + 유지보수 용이 + if문 필요

 

 

(참조 : limkydev.tistory.com/188 programmers.co.kr/learn/courses/5/lessons/188# )

추상 클래스 (abstract class)

 : 인터페이스의 역할 + 구현체를 가지고 있는 자바의 돌연변이 같은 클래스

   실체 클래스의 공통적인 부분(변수, 메소드 등)을 추출해 선언한 크래스

 

 - 객체 생성 X <- 실체적 X, 구체적 X

 - 실체 클래스와 상속관계 (실체 클래스의 부모 클래스)

 - 공통된 부분을 통일시킬 목적으로 사용

 

public abstact class 클래스명 {

   //필드

   //생성자

   //메소드

   //추상메소드 ( abstact 리턴타입 메소드명(매개변수...); )

}

 

추상클래스 Bird를 생성하고

일반 메소드 fly와 추상 메소드 sing을 선언한다.

 

그리고 추상클래스 Bird를 상속하는 Duck 클래스를 생성한다.

추상 메소드 sing을 구현하여 오버라이딩해준다.

 

Exam1.java

 

테스트 해보면, 이러한 결과가 실행된다.

'Language > JAVA' 카테고리의 다른 글

인터페이스  (0) 2021.02.23
문제풀이  (0) 2021.02.15
클래스 관련 문제풀이  (0) 2021.01.31
클래스(2) | 접근 제어자, 정적변수·메소드  (0) 2021.01.31
객체지향프로그래밍에 대해 /클래스 (1)  (0) 2021.01.23
Comments