상속
class Car{}
class SportCar extends Car {} - > Car 를 상속받게 된다.
하지만 부모 클래스가 서브 클래스 보다 더 상위에 존재한다. -> 다형성을 이용할때 중요한 개념이다.
클래스를 만들기전에 먼저, 공통이 되는 부분을 먼저 만들어 주고, 그 하위에
추가적으로 만들어 주는게 좋다 -> 확장성이 좋아진다.
매소드 재정의 (오버라이딩)
- Car 클래스에 매소드를 SportCar 에서 바꿔준다. 헝태는 동일하게 해야한다.
동물 클래스에선 public void makeSound(){}
- > 개 클래스에서 오버라이딩 하면 public void makeSound(){ System.out.println("멍멍"); }
반드시 함수의 형식은 동일해야한다. - > 재정의 해도 원본은 감춰져있다. 개 클래스에선 매소드를 2개를 가짐.
Super 키워드 - > 부모의 멤버를 가져온다.
접근 지정자
Protected - > 자식에게만 허용을 한다.
하지만 자식도 부모의 private 에는 접근을 할수가 없다.
하지만
매소드의 접근성은 하위 클래스에선 접근 범위를 늘일수는 있으나, 줄일수는 없다.
- > 상위 클래스 protected {} -> 이걸 상속 받아서, 하위 클래스 private {} 이것이 불가능하다.
상속과 생성자.
자식 생성자에서 생성자를 호출하면, 부모 생성자(인자값이 있다면, 인자가 있는, 없다면 기본생성자) 가 호출이 되고
그 다음에 자식의 생성자가 호출이 된다.
자식객체 생성 할시에
- > 부모객체 생성 - > 부모 생성자 호출 - > 자식객체 생성 - > 자식 생정자 호출
__________________________________________________________________________________________________________________
다형성
추상 클래스
: 몸체가 구현되지 않은 메소드를 가지고 있는 클래스
- > abstract class - > 추상적인 개념을 표현하는데 적당하다.
abstract 함수명 하면 추상 함수를 만들수 있다. - > 추상클래스가 있다면 반드시 재정의를 해줘야 한다.
인터페이스
: 객체와 객체 사이의 상호작용을 위한 인터페이스다.
- > 모든 것들이 추상화 되어야 한다. -> 재정의 필수.
public interface Remote {
public void trunon();
public void trunoff();
}
public class TV implements Remote { 재정으로 해줘야 한다. }
다중 상속
- > 여러개의 수퍼클래스로 부터 상속받는것, 하지만 모호성 때문에 자바는 지원하지 않는다.
- > 하지만 interface 는 가능하기 때문에 인터페이스로 간접적으로 다중상속을 하라.
class Shape{ protected int x, y; }
interface draw {}
public class r extends Shape implements drar {}
상수 공유
interface Days{
public static final int s=1 , a= 2
}
public class day implements Days{
pubic static void main [] {
출력 a
}
}
다형성
-다형성은 다양한 객체들을 하나의 코드로 처리한다. - > 가장 상위 부모 객체를 이용하여서.
- > 멤버는 자식이 더 많지만 범주는 부모클래스가 가장 상위에 존재한다.
자식객체를 부모클래스에 대입가능 - > upcasting
Shape 부모 = new 자식(1,2,) 작은 타입을 큰타입에 대입하는것이니 된다
Shape s = new 자식()
s. draw(); - > 실제로 자식의 클래스를 생성했으니 자식 클래스의 draw 함수를 가져온다.
- > 계층 구조여야 하며, 똑같은 매소드를 모두 재정의 되어 있어야 한다, 그리고 upcasting .
객체의 실제 타입을 알아내는 방법.
s instanceof Rectangle
형변환.
Shape s = new Retangle(); - > 이것은 재 정의된 매소드 만이 호출 가능하다.
((Rectangle) s). setWidth(100); - > 자식 클래스 매소드를 호출하려면 형 변환이 필요하다.
오늘의 예제
Employee Rablem
설계도 ......
부모 : Employee < - 포함관계 Departement
Permanent (정규) Temporary(비저유)
1 SalesPerson
Employee Test 클래스. (Main) - > 요구사항은
순번 이름 급여 구분
1 홍길동 200 정규직 - > 이런식으로 출력이 되도록 한다.
추상클래스 Employee - name : string + getName() : string
- pay : + getSal() : abstract double
Permanet - sal : double + getPay() : double , 생성자
SalesPerson - sales(판매 실적) : double + getPay() : double sal / 12 * sales
Temporary - time : int - pay : double (시급) + getPay () :double 시간 * 급여 생성자.
Depatrtment - Emplist(직원 리스트) : Employee[] - index(직원 숫자) : int
+ Addemp( Employee e) + PayList () : void (전체 직원의 월급을 호출)
메인 함수에서 1 . Department 객체 생성.
2. Addemp() 호출해서 5명 정도 추가.
3. Paylist( ) 호출해서 직원의 급여를 출력