일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바문제풀이
- 써니나타스
- 포렌식
- 웹개발
- 이진탐색트리
- node
- MongoDB
- 웹해킹
- 뷰
- 포렌식워게임
- gitbash
- wargame.kr
- NavBar
- 웹해킹기초
- 그래프
- 워게임
- 이진트리
- 자바
- Express
- 웹기초
- 자료구조
- 자바기초
- bootstrap
- GIT
- mongoose
- node.js
- materialize
- 워게임추천
- CTF
- nodeJS
- Today
- Total
보안 전공생의 공부
상속, 다형성, 추상 클래스 본문
(참조 : wikidocs.net velog.io/@foeverna/Java )
◆상속 : 부모가 자식에게 물려주는 것
▶extends
자식클래스 extends 부모클래스 : 자식클래스가 부모클래스를 상속함
Pig 클래스에 객체변수 name과 메소드 setName 을 만들지 않았지만
Animal 클래스를 상속받았기 때문에 사용 가능
Pig 클래스에 메소드 sleep을 추가하는 것도 가능하다.
=>자식 클래스는 부모 클래스의 기능 뿐만 아니라 더 많은 기능을 갖도록 설계될 수 있다.
◆ IS-A 관계
Pig 클래스는 Animal 클래스의 상속을 받음 => Pig는 Animal의 하위 개념
자바는 이러한 관계를 IS-A 관계라고 표현함
Pig is a Animal
이렇게 IS-A 관계(상속관계)에 있을 때 자식 객체는 부모 클래스의 자료형인 것처럼 사용가능
Animal pig = new Pig();
◆메소드 오버라이딩(method overriding)
: 부모클래스의 메소드를 자식클래스가 동일한 형태로 또다시 구현하는 행위
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 안에 animalMove라는 메소드를 만들고,
Animal 클래스를 상속받는 3개의 클래스 Human, Tiger, Eagle 을 추가했다.
각각의 클래스에 맞게 animalMove 메소드를 오버라이딩했다.
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을 구현하여 오버라이딩해준다.
테스트 해보면, 이러한 결과가 실행된다.
'Language > JAVA' 카테고리의 다른 글
인터페이스 (0) | 2021.02.23 |
---|---|
문제풀이 (0) | 2021.02.15 |
클래스 관련 문제풀이 (0) | 2021.01.31 |
클래스(2) | 접근 제어자, 정적변수·메소드 (0) | 2021.01.31 |
객체지향프로그래밍에 대해 /클래스 (1) (0) | 2021.01.23 |