상속이란!?(+장점)
: 기존의 클래스를 재사용 하여 새로운 클래스를 작성하는 것이다.
장점 : 코드를 공통적으로 관리할수 있기때문에 코드의 추가 및 변경이 매우 용이하다.
조상 클래스만 변경해도 모든 자손 클래스에, 자손의 자손 클래에까지 영향을 미치기 때문에, 코드가 적어지고 관리가 용이하다.
Class Child extend Parent {}
와 같이 extend를 작성하고 상속받고자 하는 클래스명을 작성하여 주면 된다.
위에서 볼 수 있듯이, 상속받는 자식클래스가 부모클래스를 정하여 받을 수 있다.
(단! 클래스 간의 관계에서 형제 관계와 같은건 없다, 부모와 자식관계만이 존재할 뿐이다.)
Object Class
: 모든 클래스의 최상위 클래스다. 기본클래스들은 모두 Object클래스를 상속받는다.
Super()
상속받은 멤버를 참조하는데 사용되는 참조 변수이다.
상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때는 Super()를 사용해서 구별할 수 있다.
Super는 this와 근본적으로 같다
super는 this와 마찬가지로 static메소드에서 사용할수 없고, 인스턴스메소드에서만 사용할 수 있다.
하지만,
Super와 this의 차이점 이 있다.
this()와 마찬가지로 super() 역시 생성자이다. this()는 같은 클래스의 다른 생성자를 호출 하는데 사용 하지만
super()는 조상 클래스의 생성자를 호출하는데 사용된다.
**참고**
상속은 단일 상속만 가능하고 다중상속은 불가하다.(Interface를 통한 다중상속이 가능)
**참고**
자손클래스가 조상클래스를 사용하기 위해선 조상클래스가 먼저 초기화 되어야 한다!.
Object클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자를 호출해야한다. 그렇지 않으면 컴파일러가 자동으로 super();를 생성자의 첫 줄에 삽입한다.
패키지란!?(Package)
: 클래스의 묶음이다.
목적으론 : 클래스를 효율적으로 관리하기 위함 이다. -> 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 출돌하는것을 피할 수 있다.
특징 :
1. 하나의 소스파일에는 첫 번째 문장으로 단 한번의 패키지 선언만을 허용
2. 모든 클래스는 반드시 하나의 패키지에 속해야 한다.
3. 패키지는 . 을 구분자로 하여 계층구조로 구성
4. 패키지는 물리적으로 클래스파일을 포함하는 하나의 디렉토리이다.
Import란!?
: 클래스의 코드를 작성 하기전, import를 통해 사용하고자 하는 클래스의 패키지를 미리 명시, 소스코드에 사용되는 클래스이름에서 패키지명은 생량 가능.
ex) import java.util.*; import java.sql.*; import java.html.*;
제어자란!?
1.접근제어자 : private, defalult, protected, public
2. 그외 : static, final, abstract, native, transient, synchroniuzed, volatile, strictfp
1-1 접근제어자
: 접근제어자를 사용하는 이유는 클래스의 내부에 선언된 데이터를 보호하기 위해서이다.
public > protected > default > private 순으로 접근범위가 줄어든다 즉! public이 가장 큰 접근범위를 가진다.
private : 같은 클래스 전체
default : 같은 패키지
protected : 같은 패키지, 다른패키지의 자손클래스
public : 접근 제한이 없다.
대상 |
사용가능한 제어자 |
클래스 |
public default final abstract (abstract와 static을 동시 사용불가) |
메서드 |
모든 접근제어자 final abstract static (메서드에 static과 abstract를 함께 사용불가) |
멤버변수 |
모든 접근제어자 final static |
지역변수 |
final |
**abstract메서드(자손클래스 구현 목적)의 접근 제어자가 private(자손클래스에 접근 불가)일 수 없다.
**참고**
생성자에 접근제어자를 사용함으로써 인스턴스의 생성을 제한할 수 있다.
2-1 final
: 더이상 상속을 불가하게 막을때 사용한다.
InstanceOf연산자란!?
: 인스턴스의 실제 타입을 알아보기 위해 instanceOf연산자를 사용한다.(주로 조건문에 사용)
Abstract Class(=추상클래스)
: abstract를 보고 이 클래스에는 추상 메서드가 있으니 상속을 통해, 구현해주어야 한다.(멤버변수,메서드를 가질 수 있다)
작성방법
: 공통적으로 사용될 수 있는 클래스를 바로 작성하기도 하고, 공통적인 부분을 뽑아 추상크래스로 만들어 상속하도록 하는경우
인터페이스(Interface)란!?
: 추상클래스다. 하지만, 메서도 또는 멤버변수를 구성원으로 가질수 없다.
다른 클래스를 작성하는데 도움 줄 목적이다.
인터페이스는 implements를 사용한다.
**참고**
상속 |
extend |
인터페이스(Interface) |
implements |
인터페이스의 장점
1. 개발시간 단축
2. 표준화 가능
3. 서로 관계없는 클래스들을 관계를 맺어준다
4. 독립적인 프로그래밍 가능