728x90
반응형
상속, Inheritance
- 기존의 클래스를 재사용하여 새로운 클래스를 작성할 수 있게 하는 문법
- 목적 : 클래스 코드의 재사용
코드의 재사용
기존의 코드를 이용하여 새로운 코드를 개발하는 것
(필요한 부분은 수정하고, 추가하기 한다)
class Animal {
private String name;
private int age;
private String feed;
}
class Dog extends Animal {
/* private String name;
private int age;
private String feed; */
public void cry() {
System.our.println("멍멍");
}
}
class Cat extends Animal {
/* private String anme;
private int age;
private String feed; */
public void cry() {
System.out.println("야옹");
}
}
class Horse extends Animal {
public void cry() {
System.out.println("히힝");
}
}
- 클래스의 중복되는 코드를 하나로 관리할 수 있게 해 준다
- 상속을 주는 클래스(부모클래스)의 코드를 변경하면 상속을 받는 클래스(자식 클래스)들도 전부 반영된다
- 상속을 주는 클래스 : 부모 클래스, 수퍼, 상위, Based(기준의)
- 상속을 받는 클래스 : 자식 클래스, 서브, 하위, Derived(유도된, 파생된)
상속의 문법
class Parent {
int n1;
int n2;
String name;
}
class Child extends Parent {
}
- Child 클래스는 Parent 클래스의 모든 멤버를 상속받는다
- Child 클래스는 멤버를 작성하지 않아도 Parent의 멤버를 가지고 있는 것처럼 사용할 수 있다.
오버라이딩, Overriding
- 메소드 재정의
- 상속받은 메소드를 자식 클래스가 새롭게 정의하는 것
- 기존의 코드를 덮어 씌운다
class Animal {
String name;
int age;
public void cry() {
}
}
class Dog extends Animal {
@Override
public void cry() {
}
}
class Cat extends Animal {
@Override
public void cry() {
}
}
class Horse extends Animal {
@Override
public void cry() {
}
}
오버로딩, Overloading
- 메소드 중복 정의
- 같은 이름의 메소드를 매개변수의 개수 또는 타입, 순서를 다르게 작성하여 다른 메소드를 추가 정의하는 것
바인딩, Binding
- 메소드의 호출코드(사용)와 메소드의 정의코드(구현)가 연결되는 과정
- 정적 바인딩 : 프로그램 실행 전 바인딩 되는 것 -> 변수의 타입
- 동적 바인딩 : 실행 도중에 메소드가 호출될 때 바인딩 되는 것 -> 인스턴스의 타입
- ** 자바는 기본적으로 동적 바인딩을 수행한다
super 키워드
super
- 상속받은 부모객체 참조
- 자식클래스 코드에서 (상속받은)부모클래스 멤버에 접근할 때 사용
this.num = 10; //자식클래스의 멤버 num
super.num = 20; //부모클래스의 멤버 num
//메소드가 오버라이딩 되어있는 상황일 때
this.display(); //오버라이딩한 메소드
super.display(); //오버라이딩 전 부모메소드
super()
- 수퍼 생성자, 부모클래스 생성자 호출
- 자식클래스의 생성자에서 부모클래스의 생성자를 호출할 때 사용한다
- 직접 호출코드를 작성하지 않으면 자동으로 부모클래스의 디폴트 생성자를 호출한다
- 부모클래스에 정의되어있다면 전달인자를 넣어서 호출할 수 있다
- 자식클래스 생성자의 첫 번째 코드로 사용해야한다
final 키워드
- 더 이상 확장(변경)할 수 없도록 설정하는 키워드
- final 키워드 적용위치
- 변수
- 딱 한번만 초기화(대입) 할 수 있도록 설정
- 변수를 상수화시킴
- ex) public final int MAX =. ;
- public static final int LEN = 10;
- 메소드
- 더 이상 오버라이딩 할 수 없도록 설정
- ex). public final void out() {
- //자식클래스에서 재정의(override)불가
- }
- 클래스
- 더 이상 자식클래스를 생성할 수 없도록 설정
- ex) public final class Child() {
- //자식클래스를 만들 수 없음
- //상속을 줄 수 없게 된다
- }
- 변수
다형성, Polymorphism
- 한 요소가 다양한 모습으로 표현되거나, 다양한 기능을 수행할 수 있음을 뜻함
- 부모클래스 타입의 객체변수를 이용하여 다양한 자식클래스 타입을 처리한다
- -> 대입, 동적 바인딩 메소드 호출 등등
Parent p1 = new Child1();
Parent p2 = new Child2();
public void out(Parent p){
}
out( new Child1() );
out( new Child2() );
for each 구문
for( [요소의 데이터타입] [변수명] : [배열or컬렉션] ) {
//변수명 사용 가능
}
- 배열의 모든 요소를 변수에 넣으면서 반복한다
- 배열의 0번째 인덱스 요소부터 마지막요소까지 한 번 반복할 때 하나의 요소를 대입하면서 반복한다
int[] arr = { 1,2,3,4,5 };
for( int num : arr ) {
//num 사용
}
// 5번 반복, 매 반복마다 num변수에 1~5까지 차례대로 대입된다
// for(int i=0; i<arr.length; i++) { } 와 비슷한 반복
객체 지향 프로그래밍 (OOP)의 주요 특징 3가지
- 캡슐화
- 서로 연관있는 여러 데이터들을 하나의 클래스로 묶어서 관리한다
- 클래스 외부에서의 접근을 제한하면서 데이터들을 보호한다 (정보은닉)
- 상속
- 기존의 클래스 코드를 이용하여 새로운 클래스를 생성할 때 사용한다
- 이미 작성된 코드를 중복으로 작성하지 않고 원하는 새로운 코드를 구현할 수 있따
- 코드 재사용성을 높여준다
- 다형성
- 하나의 타입으로 상속 관계에 있는 다양한 객체를 다룰 수 있따
- 메소드 오버로딩을 줄일 수 있다.
반응형
'개발 > 자바' 카테고리의 다른 글
자바 API - Object 클래스 // toString, equals, hashCode, clone, finalize (0) | 2021.01.28 |
---|---|
자바 추상클래스, 추상메소드 / 인터페이스 (0) | 2021.01.27 |
자바 다차원배열 (0) | 2021.01.21 |
자바 배열 복사 (0) | 2021.01.20 |
자바 배열이란? // 배열 정렬, Bubble Sort (0) | 2021.01.19 |
댓글