학원 강의 요약--------------------------------
생성자에 private을 붙여 객체생성을 제한하는 싱글톤
상속->반복 작업 줄임, 기본 클래스 재사용
1. 조상 클래스 재사용, 자식 클래스 빨리 개발 가능
2. 코드 중복 줄임
3. 유지보수에 탁월
4. 객체 다형성 구현 가능(다형성:객체 참조변수 와따가따~)
---------private 제외-> 같은 클래스만 사용 가능하니까, 겟셋으로 불러옴
---------생성자 제외-> 부모꺼 상속되지 않음
---------클래스 3개 까지만 가능
protected -> 같은 패키지 또는 자식만 불러올 수 있음! 그러나 잘 안 씁니다//조상의 조상 것도 불러오기 가능
그러나, 자식의 인스턴스가 생성될 때, 조상의 기본 생성자는 생성됨
왜?부모 인스턴스가 먼저 생성되거든욤 ^0^
ㄴ조상1-조상2-자식일 때, 자식인스턴스를 불러오면 조상1-조상2-자식 순으로 인스턴스 생성,
그 과정에서 조상1 생성자 조상2 생성자 자식 생성자 가 생성됨, 보통 기본생성자가 생성되겠죠?
부모 멤버를 가져올 때는, 고냥 super를 붙여줍니다(부모에게서 받은 거라는 걸 알려주는 것)
원래는 자식 멤버와 부모 멤버가 이름이 같을 때 쓰지만, 걍 없어도 써주면 헷갈릴 일이 없음 !!
어떤 것을 상속해주고, 상속을 해주지 말아야 할까?
->공통 사항만 상속해준다
super. -> 부모에게서 받은 멤버라는 것을 알려주기 위해, 구분을 위해 씀
super()
ㄴ 부모 생성자에 초기화 한 값 가져올 수 있어요 !!
ㄴ 부모 메소드에 있는 내용 가져올 수 있어요!!
오버라이딩->재정의
ㄴ 상속 관계에 있는 생성자, 메소드가 있어요
ㄴ 같은 선언부를 가지고 내용만 다르게 오버라이딩 할 수 있어요
ㄴ 위에 @Override 써줍니다 -> 컴파일러가 알아듣게 하려고, 본인이 오버라이딩 했는지 알기 쉬우라고
모든 부모가 없는 클래스는, 사실 Object class를 상속 받는다(최상위에 존재)
class a {} <-이건 사실
class a extends Object {} <-이거였음 ㄷㄷ
Object 클래스에 toString() 은
객체 주소값을 문자열로 변환해준다
그런데,
Object 클래스에 있는 toString() 메소드를 오버라이딩하면
객체 출력 할 때, 객체 주소값이 아니라
원하는 출력값이 나온다는 사실!!!! ->개꿀!!!!!!
내일 할 거 -> 추상클래스/////
추상클래스 예습-------------------------
<instanceof 연산자> - 형변환이 가능할까요?
참조변수가 참고하고 있는 인스턴스의 실제 타입을 알아보기 위해 instanceof 사용
보통 조건문에 사용함
참조변수 instanceof 타입(클래스명) ->결과는 true또는 false
void doWork(Car c) {
if(c instanceof FireEngine) { //Car 객체를 가리키는 참조변수 c가 FireEngine의 인스턴스를 가리키나요?
FireEngine fe = (FireEngine)c; //가리킨다면(true라면) fe에 (FireEngine인스턴스인)c를 넣어주세요
}
Car 타입의 참조변수 c가 입력값이지만,
얘가 정확히 어떤 인스턴스인지는 모름(참조변수 형변환이 가능하니까!)
실제 인스턴스와 같은 타입으로 형변환해야, 인스턴스의 모든 멤버를 사용가능하다
<매개변수의 다형성> -> 메소드의 매개변수로도 다형성 적용 가능
조상: Product
(Product의)자식: Tv, CD
class Buyer {
void buy(Product p) { 내용 } ->p에는 Tv도 CD도 들어갈 수 있다, 왜? 조상 참조변수로 자식을 가리킬 수 있으니까
}
Product p = new Tv()
Product p = new CD() 뿐만 아니라 매개변수에도
메소드(Product p) {} 에도 new Tv()나 new CD()가 들어갈 수 있는 것이다
<여러 종류의 객체 배열> -> 객체 배열의 타입이 조상? 자식도 배열에 넣어요
조상 : Product
자식 : Tv, Computer, Audio
Product p [] = new Product[3]
p[0] = new Tv();
p[1] = new Computer();
p[2] = new Audio();
가능합니다!
1.공통의 조상을 가진 서로 다른 종류의 객체를 배열로 묶어 다루기
2.다루고 싶은 객체들의 상속 관계를 따져서, 가장 가까운 조상의 참조변수 배열(바로 위 조상)
<추상 클래스> - 미완성 설계도(틀)
1. 미완성 메서드(추상메서드)를 포함한다면, 무조건 "추상 클래스"
2. 추상 클래스는 인스턴스 생성 불가 //상속을 통해 자손 클래스에 의해서만 완성됨
- 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상 클래스로서 중요한 의미
공통 부분을 그린 미완성 설계도를 만들고->이를 이용해 각각 완성된 설계도를 만든다
abstract class 이름 {} <-앞에 abstract를 붙여주면 추상 클래스
<추상 메서드> 설계만 하고, 실제 수행 내용은 작성하지 않는 것
선언부만 작성/구현부는 미작성 //주석을 덧붙여 어떤 기능을 실행하는 목적인지만 알려줌
ㄴ 실제 내용은 상속받는 클래스에서 구현하도록 비워둠
- abstract 리턴타입 메서드이름(); //수행목적 설명 주석
ㄴ 추상메소드의 자손 클래스는, 오버라이딩을 통해 조상의 추상 메소드 전부 구현 필수!!!!!
만약 일부만 구현한다면? 자손도 추상클래스가 됨 ㅠㅠ
구현부보다 선언부가 더 중요함-> 메서드이름 / 리턴타입 / 매개변수만 알면?
ㄴ 내용이 없어서 추상메서드 코드 작성 가능! 자손이 완성시켜 호출함
<추상 클래스의 작성> - 기존의 클래스들에서 공통적인 부분을 뽑아 상속함
상속 -> 자손 클래스를 만드는 데 -> 조상 클래스를 사용함
추상화 -> 기존 클래스의 공통 부분을 뽑아 -> 조상클래스 만듬
상속계층도에서 위로 올라갈수록? 추상화되고 공통요소가 명확해짐
상속계층도에서 아래로 내려갈수록? 구체화되고 세부요소들이 생겨남
abstract class Unit { //추상클래스
abstract void move(int x, int y); //추상메소드 ->가 하나만 있어도 추상클래스
void stop() {내용} //내용있는 메소드
}
class Marin extends Unit {
void move(int x, int y) { 물속에서 움직이는 내용 } //조상 추상메소드 완성
void stimPack() { 내용 } //자기의 메소드 추가
}
class Tank extends Unit {
void move(int x, int y) { 땅위에서 움직이는 내용 } //조상 추상메소드 완성
void changeMode() { 내용 } //자기 메소드 추가
}
-----------------------
내일 추상클래스 까지 한다던데 예습 완료!
토일월화 쉬니까 그 동안 더 더 공부해야겠다 !!!(예습위주)
'국비 학원 가서 개발새발' 카테고리의 다른 글
예습) 디폴트 메서드와 스태틱 메서드(인터페이스) , 내부클래스... (1) | 2022.10.08 |
---|---|
국비학원 9일차) 상속, instanceof, 타입변환... 예습)인터페이스 (1) | 2022.10.08 |
국비학원 7일차) 예습:패키지,(접근)제어자,캡슐화,다형성,참조변수 형변환 (0) | 2022.10.05 |
국비학원 6일차) 클래스 생성자를 배우다(예습:상속) (1) | 2022.10.04 |
혼자 공부) 오버로딩 외... (0) | 2022.10.02 |