1. 상속 (is a)
- 기존(상위) 클래스의 자산(멤버 변수, 멤버 메서드)을 자식(하위) 클래스에서 재사용하기 위한 것
- extends 키워드를 사용 ("자식 클래스명 extends 부모 클래스명 {}")
- Object 클래스는 모든 클래스의 조상 클래스이다.
- Object 클래스의 메서드 : hashCode(), equals(), toString()
- 자바에서는 단일 상속만을 지원한다. >> 다중 상속을 하기 위해서는 interface와 포함 관계로 단점을 극복
- 포함 관계(has a) : 2개 이상의 클래스에서 특성을 가져올 때 하나는 상속, 나머지는 멤버 변수로 처리
※ SpriderMan2는 Person이다(is a), SpiderMan2는 Spider를 가진다(has a)
public class SpiderMan2 extends Person{
Spider spider; // reference type => null : 에외 처리 필요
boolean isSpider;
public SpiderMan() {
this.spider = new Spider();
}
void fireWeb() {
if (isSpider) {
spider.fireWeb();
} else {
System.out.println("거미줄 발사X");
}
}
}
2. 메서드 오버라이딩(overriding)
- 조상 클래스에 정의된 메서드를 자식 클래스에서 적합하게 수정하는 것
- 메서드 이름, 리턴타입, 개수, 타입, 순서가 모두 같아야한다.
- 접근 제한자는 부모 보다 범위가 넓거나 같아야 한다.
- 조상보다 더 큰 예외를 던질 수 없다.
- "가까운 순서부터 찾는다!!"
3. super
- super 키워드를 통해 조상클래스에 접근이 가능하다. (ex. super.메서드명())
- 변수의 scope : method 내부 >> 해당 클래스 멤버 변수 >> 조상 클래스 멤버 변수
class Parent {
String x = "parent";
}
class Child extends Parent {
String x = "child";
void method() {
String x = "method";
System.out.println("x : " + x); // method
System.out.println("this.x : " + this.x);// child
System.out.println("super.x : " + super.x); // parent
}
}
public class ScopeTest {
public static void main(String[] args) {
Child child = new Child();
child.method();
}
}
- super를 통해 조상 클래스의 생성자 호출이 가능하다.
- super()는 자식 클래스 생성자의 맨 첫 줄에서만 호출 가능 (this()와 같이 쓸 수 없다.)
- 컴파일러가 "this()나 super()"가 없으면 명시적으로 super()를 삽입한다.
Person(String name) {
// super(); // --> Object의 기본 생성자 명시적 삽입
this.name = name;
}
4. Annotation
- 컴파일러, JVM, 프레임워크 등이 보는 주석
- 컴파일러에게 "확인 한번 해주세요"
- @Deprecated : "앞으로 없어질 수도 있어요"
- @Override : "오버라이딩한 메서드에요"
- @SuppressWarnings : "사소한 warning은 신경쓰지 마세요"
5. Package
- 많은 클래스 >> 패키지 이용
- 모든 클래스는 반드시 하나의 패키지에 속한다.
- com.ssafy(회사명).hrm(project).common(용도)
6. import
- 다른 패키지에 선언된 클래스를 사용하기 위한 키워드
- " import 패키지명.클래스명 or * "
- 자동 임포트 : ctrl + shift + O
7. 제한자(modifier)
- 클래스, 변수, 메서드, 생성자 선언부에 함께 사용되어 부가적인 의미 부여
- 접근 제한자 : public, protected, defalut(package), private
- 그 외 제한자 : static("메모리에 먼저 올라가 있어라"), final(더 이상 수정 불가), abstract(추상 클래스 or 추상 메서드 작성)
- 접근 제한자는 하나만 사용 가능
8. final
- 마지막, 더이상 바뀔 수 없음, 완벽하다
- final class : 더 이상 확장 X >> 상속 금지 >> 오버라이딩 금지 , ex) Math, String
- final method : 더 이상 재정의 할 수 없음 >> 오버라이딩 금지
- final variable : 더 이상 값을 바꿀 수 없음(상수)
- Blank final : 생성자에서 한번만 초기화 할 수 있고 변경할 수 없다.
- static final : 단지 final만 있으면 객체마다 갖는 값으로 공용성이 없음, 진정한 상수는 객체와 무관하게 모두가 공용하는 값. ex) Math.PI
9. 접근제한자
- protected, private는 클래스 앞에 붙을수 없다.
- protected 키워드를 사용할 경우 상속관계가 있을 경우 = public, 없을 경우 = defalut
'Web > JAVA' 카테고리의 다른 글
예외 처리(exception handling) (0) | 2024.01.22 |
---|---|
abstract class, Interface, generic (0) | 2024.01.19 |
데이터 은닉(Encapsulation), 다형성(Polymorphism), Singleton (0) | 2024.01.18 |
클래스, 객체, 메서드, 변수, 생성자 (0) | 2024.01.16 |
기본 문법, 배열 (0) | 2024.01.15 |