클래스는 틀 객체는 제품
클래스는 설계도 객체는 tv
참조변수를 통해 객체를 실행
켑슐화 : 변수를 private처리하여 외부에서 접근못하도록 구성. 외부에서 바로 사용이 안되기때문에 getter setter를 통해 사용
상속 : 상속을 쓰지 않으면 그냥 클래스를 나열할뿐. 상속을 사용하면 구조화가 가능. 코드의 변경이나 수정이 가능 . 공통클래스에서 수정하면 상속받는 클래스에서도 수정됨으로 유지보수 용이
has a /is a/extends
super()
부모객체의 생성자를 호출하는 메소드
다향성 : 업케스팅을 해서 사용하면 부모객체는 사용가능하나 자식객체는 사용불가 다운캐스팅을 통해 사용 가능하게 만듦
Car[] carr = new Car[5]; //Car 부모클래스
carr[0] = new Sonata(); //자식클래스
carr[1] = new Avante(); //자식클래스
carr[2] = new Spark();
carr[3] = new Morning();
carr[4] = new Grandure();
코딩을 간결하게 해 줄 수 있음
angryCar (new Sonata()); //자식클래스
angryCar (new Avante());
angryCar (new Grandure());
public void angryCar (Car c){ //Car 부모클래스
}
instanceof
-> if ( c instanceof sonata){ // 이러면 소나타로 동작
}else if(c instanceof Avante){ //이러면 아반뗴로 동작
객체가 각각 다른 코드를 실행하게 해주는 명령어
오버 라이딩 vs 오버로딩
오버라이딩은 메소드를 하위클래스에서 새로 정의하며 메소드 이름 매개변수(데이터타입) 리턴타입이 동일해야 가능 중괄호 안 내용만 변경하여 사용{}
오버로딩은 같은 클래스내 같은 이름인 메소드에서만 작동 매개변수(데이터타입)이 달라야함 리턴타입이 다를 수 있음
바인딩?
실행할 메소드 코드와 호
실제 실행할 메소드 코드와 호출하는 코드를 연결시키는 것을 바인딩이라 함
상속 관계로 이루어져 다향성이 적용된경우 메소드 오버라이딩이 되어있으면 정적바인딩된 메소드 코드보다 오버라이딩된 메소드 코드를 우선수행하게되는게 동적바인딩
-> paint / draw 모두 오버라이딩 되어있음
여러개의 형태를 갖는다는 의미로 상속을 이용하여 자식객체를 부모클래스타입 변수로 다루는것
상위 클래스에는 그보다 더 상위 클래스를 넣을수없음
public class Child1 extends Parent {
up casting
상속관계에 있는 부모 자식 클래스간 부모타입의 참조형 변수가 모든 자식 타입의 객체의 주소를 받을수 있다. 일단은 부모가 우선이란거임
자식객체의 주소를 전달받은 부모타입의 참조변수는 원래 부모타입의 멤버만 참조 가능
예시) //Sonata클래스가 Car클래스의 후손임
Car c = new Sonata();
Sonata 클래스형 -> Car 클래스 형으로 바뀜
down casting
자식객체의 주소를 받은 부모참조변수를 가지고 자식의 멤버를 참조해야하는경우 후손클래스 타입으로 형변환해야함
예시) //Sonata클래스가 Car클래스의 후손임
Car c = new Sonata();
((Sonata)c).moveSonata(); //참조변수 c를 Sonata 클래스로 형변환 후 sonata클래스 내부 메소드 사용
↓ 같은의미임
Sonata sonata = (Sonata)car; // = new Sonata();
sonata.moveSonata();
Car car = new Sonata();
몸체{} 중괄호가 없는 메소드
몸체에 있는 내용을 상속받은곳에서 사용할 수 있게 씀
특징
1. 미완성클래스
자체적으로 객체생성불가
->반드시 상속하여 객체생성
extends Parent{} 로 상속하고
사용
2. abstracr 메소드가 포함된 클래스면 반드시 abstract 클래스
-> abstract가 없어도 되는데 있으면 무조건 추상클래스
3. 일반적으로 메소드 변수도 포함불가
public abstract class Car{}
1) new car(): X
2) Car car = new Spnata();
-> 업캐스팅용으론 쓸수있다
접근제한자 abstract 리턴타입 메소드명();
public acstract class Car{
public Sting carName;
abstract void move(int x);
상수형 필드와 추상 메소드만을 작성할 수 있는 추상 클래스의 변형체이다.
메소드의 통일성을 부여하기 위해서 추상 메소드만 따로 모아 놓은것으로, 상속시 인터페이스
내에 정의된 모든 추상 메소드를 구현해야 한다
특징
장점
인터페이스는 implements
추상클래스는 extends
공통중요