** 다형성 : 조상참조 변수로 자손 타입 객체를 다루는 것
오버 로딩
오버로딩 : 같은 이름의 함수를 다르게 재정의 하는 것
목적 : 이름이 같은 여러 개의 메소드를 중복 선언하여 사용의 편리성 향상
1. 매개변수의 유형이 다르거나 개수가 달라야 한다.
2.여러 숫자를 지정하게 하는 방법 : 함수이름(int .... numbers){ 처리 } -> 원하는 개수를 넣을수 있다.
3. 정적 바인딩 : 컴파일 시 중복된 메소드 중 호출되는 메소드 결정
오버 라이딩
오버라이딩 : 부모로부터 상속 받은 메서드를 자식에 맞춰서 수정하는 것
목적 : 슈퍼 클래스에 구현된 메소드를 무시하고 서브 클래스에서 새로운 메소드 재정의
1. 메소드와 동일한 시그니처 사용, 반환 타입도 동일
2. 부모보다 좁은 범위를 사용할 수 없다.
3. 개수와 타입이 모두 같아야 한다.
4. 오버라이딩 불가 1. private 메서드 : 부모 전용 클래스이기 때문에 상속 x
2. 정적 메서드 : 클래스 소속이므로 x
3. final 메서드 : 상속 x
5. 동적 바인딩 : 호출할 메서드를 컴파일 시 결정하지 않고 실행 중 결정하는 것
6. super() 키워드: 오버라이딩 한 후 부모 클래스를 다시 쓰고 싶은 경우
생성자
표현
public 클래스명(매개변수1, 매개변수 2.. ){ ..... }
생성자 사용 이유
1. 객체 변수에 값을 무조건 설정해야만 객체가 생성될 수 있도록 하기 위해
2. 인스턴스 변수를 초기화시켜주기 위해서
특징
1. 클래스명과 메소드명이 동일해야 한다.
2. 리턴타입을 정의하지 않는다.
3. 생성자는 객체가 생성될 때 호출된다. (new 키워드를 사용할 때)
따라서 new 키워드드로 객체를 만들 때 문자열을 전달해야만 한다.
4. 오버로딩이 가능하다.
상속과 생성자
슈퍼 클래스의 생성자가 서브 클래스의 생성자 보다 먼저 실행된다.
ex) 슈퍼클래스 A 서브클래스 B 서브클래스 C -> C 생성자 실행 -> 출력 : A B C 순
1. 슈퍼 클래스의 생성자가 없을 시 (묵시적 선택)
서브 클래스의 생성자에 대해 컴파일러는 자동으로 슈퍼클래스의 기본 생성자와 짝을 맺음
짝이 맞지 않는 경우 (매개변수 값이 같지 않는 경우)에는 오류 발생
기본적으로 슈퍼 클래스의 기본 생성자가 호출되기에 원하는 생성자가 호출되지 않을 수 있음
-> super() 사용으로 해결
2. super() 를 이용한 슈퍼클래스의 생성자 선택 (명시적 선택)
서브 클래스의 생성자에서 슈퍼 클래스의 생성자를 명시적으로 선택하는 것이 원칙
super() 안에는 매개변수를 주어 매개변수를 가진 슈퍼 클래스의 생성자를 호출
반드시 super()의 호출은 생성자 첫 라인에 와야 한다.
상속
접근 지정자
슈퍼 클래스 멤버에 접근하는 클래스 종류 | 슈퍼 클래스 멤버의 접근 지정자 | |||
private | 디폴트 (미지정 경우) | protected | public | |
같은 패키지의 클래스 | X | O | O | O |
다른 패키지의 클래스 | X | X | X | O |
같은 패키지의 서브 클래스 | X | O | O | O |
다른 패키지의 서브 클래스 | X | X | O | O |
1.private
private 으로 선언한 변수는 선언한 클래스 내에서만 사용할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Point{
private int x,y;
public void set(int x,int y) {
this.x=x;
this.y=y;
}}
class ColorPoint extends Point{
void print() {
System.out.print(x+","+y);
}
}
에러 발생
why? 상속 받은 ColorPoint 는 x,y에 접근할 수 없다.
|
cs |
즉 Point 클래스에서만 private 변수를 사용할 수 있다.
2.protected
같은 패키지에 모든 클래스, 상속되는 모든 서브 클래스에서는 접근이 가능하다.
* protected는 다른 패키지더라도 상속되는 클래스에서는 접근이 가능하다.
3.final
더 이상 상속될 수 없는 클래스, 클래스 내부의 모든 메소드 오버라이딩 불가
업 캐스팅과 instanceof 연산자
1. 업 캐스팅 : 서브 클래스 객체가 슈퍼 클래스 타입으로 변환되는 것
서브 클래스는 슈퍼 클래스의 모든 특성을 물려 받는다 즉 서브 클래스는 슈퍼클래스로 취급할 수 있다.
고양이는 동물이다 와 같이 말이다.
사용이유 : 공통적인 부분들을 간단하게 하기 위해서
업캐스팅한 래퍼런스는 슈퍼클래스의 멤버만 접근할 수 있다.
ex) 슈퍼 클래스 s , 서브 클래스 sub 시
s= sub or s= (서브 클래스)sub
* 업 캐스팅을 배열화 할수 있다. 슈퍼 클래스 s [] ={sub1,sub2...}
2. 다운 캐스팅 : 원래대로 되돌리는 것
ex) 슈퍼 클래스 s , 서브 클래스 sub 시
sub= (서브클래스)s
3. instanceof 연산자
위와 같이 업캐스팅을 한 경우 래퍼런스가 가리키는 객체를 구분하기 힘들다 그리하여
instanceof 연산자를 사용하여 객체가 어떤 클래스 타입인지 구분할 수 있다.
표현 : 객체래퍼런스 instanceof 클래스타입
'JAVA > 기본 문법 내용 정리' 카테고리의 다른 글
인터페이스 & 추상 클래스 (0) | 2021.10.05 |
---|---|
배열 [ ] & enum (0) | 2021.10.05 |
조건문 & 반복문 (0) | 2021.10.05 |
클래스 (0) | 2021.10.05 |
변수와 데이터 형식 (0) | 2021.10.05 |