수업 정리
상속 Part
상속? -> 부모 --- 자식 관계
부모가 가진 모든것을 자식에게 물려준다 .. 상속의 통상적인 개념
자바에서의 상속?
부모클래스(super class) --> 자식 클래스(sub class)
똑같은 기능을 하는 메서드가 여러 클래스에서 동일하게
필요하다면 그냥 만들지 않고 상속을 통해 물려받게 하는 이유?
--->
1) 코드의 재사용성
똑같은 코드를 별개로 반복해서 사용하면(독립적으로 반복해서 사용하면)
메모리적으로 이득x 그런데 매번 따로 만들지 않고 상속을 하면
코드의 재사용성 + 메모리적으로 이득
2) 클래스들간의 관계형성
a
b
c
d 이랬던 부분을 --> abcd로 묶어서 해석이 된다면 ?
public class Main {
public static void main(String[] args) {
사람 a사람 = new 사람();
a사람.숨쉬다();
동물 a동물 = new 동물();
a동물.숨쉬다();
}
}
clss 동물 {
}
class 사람 {
void 숨쉬다() {
System.out.println("숨쉬다");
}
}
상속 알쓸신잡
ab 테스트로 상속 a(자식) is (익스텐스) b(부모) -> ..은 ...이다
의 결과가 맞는 말이면 상속을 사용해도 된다.
AB_Test 의 결과가 거짓,불편하면 상속은 쓰면 안된다
자식 클래스에 매개 변수 삽입시 오버라이딩으로 취급 x 오버로딩!
extend --> 확장
부모가 물려준 메서드를 내 입맛대로 바꾸는 것-- > 메서드 재정의
자바는 다중 상속은 가지지 못함(자식 클래스는 1명의 부모 클래스만 가질수 있음)
자바의오토캐스팅(자동 형변환)
상속을 통한 오토캐스팅
수동형변환
자바야 내가 이거 확인해보니까 형태가 바뀌어도 괜찮아
아무 문제 없어. 그러니까 진행시켜!
설명 문제가 있더라도 내가 책임진다 시키는대로 해! 라는 의미를 내포하고 있음
내가 바꾸고자 하는 타입을 소괄호 안에 넣어서 값 앞에 위치시키는 방법
수동형변환은 개발자가 강제적으로 사용하는 방식이기에 꼭 필요할 떄 제외하고는
사용하는것 비추
사람 a사람1 = a사람; 이거는 출력이 2개만 나오나 밑처럼 하면 4개가 나온다
사람 a사람1 = (사람) a사람;
// 자바의오토캐스팅(자동 형변환)
// 상속을 통한 오토캐스팅
// 동물 a사람 = new 사람();
// class 동물 {
// void t1() {
// }
// void t2() {
// }
// }
//
// class 사람 extends 동물 {
// void t3() {
// }
// void t4() {
// }
//
//}
Test test = new Test();
(생성자)
생성자
생성자는 메서드의 일종
특수한 기능이 하나 첨가된 메서드
리턴 타입이 없다
생성자의 명은 클래스의 명과 같다 void가 붙는 순간
메서드 명인지
생성자인지 자바는 몰라!
일반적인 메서드들의 호출방식으로는 호출 불가
인스턴스를 생성할 떄 호출한다
public class Main {
public static void main(String[] args) {
Car car1 = new Car("페라리", 200);
car1.race();
Car car2 = new Car("람보르기니", 220);
car2.race();
Car car3 = new Car("람보르기니", 220, "qwe");
car3.race();
}
}
class Car {
int maxSPeed;
String name;
String qwe;
인스턴스 초기화 블럭
인스턴스 변수들을 초기화 하라고 있는 문법
{
}
스태틱 초기화 블럭
클래스 변수를 초기화 할 때 사용하는 문법
static {
qwe = "asd";
}
Car() {
this.name = "asd";
}
내가 만들고자 하는생성자
Car(String name, int maxSpeed) {
this.name =name;
this.maxSPeed = maxSpeed;
}
내가 만들고자 하는 생성자2
Car(String name, int maxSpeed,String qwe) {
this.name =name;
this.maxSPeed = maxSpeed;
this.qwe = qwe;
}
생성자는 생성자끼리 호출 가능
void race() {
System.out.printf("%s 자동차가 %dkm의 속도로 달린다\n" , this.name , this.maxSPeed);
}
}