부모 -> 자식 관계
부보가 가진 모든 것을 자식에게 물려준다
-부모 클래스(super class)
-자식 클래스(sub class)
*부모가 가진 건 자식이 다 갖는다
<->자식이 가진 건 부모가 다 가지고 있지 않을 수 있다
ex)
class 사람(A) extends(is) 동물(B)
동물 = 부모
사람 = 자식
오버라이딩(oop의 특징 다형성) = 새로운 숨쉬다 메서드를 만든 게 아니라 부모가 물려준 숨쉬다를 자식이 원하는대로 사용하기 위해 수정하는 느낌 = 메서드 재정의
AB_Test
AB_Test의 결과 = 사람은 동물이다
AB_Test의 결과가 거짓,불편하면 상속은 쓰면 안된다
AB_Test의 결과가 맞는 말이면 상속을 사용해도 된다
상속을 사용하는 이유
-코드의 재사용성
-메모리 효율적
-클래스들간의 관계 형성
구성 방식
A has a B
자바의 오토캐스팅(자도 형변환)
=상속을 통한 오토캐스팅
수동 형변환
->자바야 내가 이거 확인해보니까 형태가 바뀌어도 괜찮아 -> 아무 문제 없어. 그러니까 진행시켜
->설령 문제가 있더라도 그건 내가 책임져! 넌 시키는대로 해!
-내가 바꾸고자 하는 타입을 소괄호 안에 넣어서 값 앞에 위치시키는 방법
ex) 동물 a사람 = new 사람();
사람 a사람1 = (사람) a사람;
Integer.parseInt = 문자열을 정수로 변환하는 코드
ex) String a = "10";
int b = Integer.parseInt(a);
String.valueOf = 정수를 문자열로 변환하는 코드
ex) int a = 10;
String b = String.valueOf(a);
System.out.println(b);
Test test = new Test();
class Test {
Test() {
}
Test
-생성자
-메서드의 일종
-특수한 기능이 하나 첨가된 메서드
-리턴타입이 없다 -> 생성자는 리턴을 못한다
-생성자의 이름은 클래스명과 같다
-일반적인 방식으로 호출 불가
-인스턴스를 생성하고 싶을 때 new와 함께 사용하여 호출한다 -> 생성자는 인스턴스가 생성될 때 실행된다
-기본 생성자는 언급하지 않으면 생략되어 있다 -> 아무 생성자도 언급되지 않았을 때만
-매개변수를 가질 수 있다
-오버로딩 가능
-생성자끼리는 호출 가능
-생성자 코드는 무조건 첫 번째 줄에 있어야함
명시적 초기화
-명시적 초기화가 필요한 경우 99.9% 없다
-생성자보다 처리가 빠름
명시적 초기화를 해야만 하는 경우 1가지
-> 상수 만들 때
인스턴스 초기화 블럭
-인스턴스 변수들을 초기화 하라고 있는 문법
스태틱 초기화 블럭
-클래스 변수를 초기화 할 때 사요하는 문법
-프로그램이 시작하면 실행