![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/VUxvn/btqzmSmJ4tu/kkk49qvo4e5bAh6q56hXOk/img.png)
모든 class는 계층형 구조를 갖고있으며 가장 상단에는 object 클래스가 존재한다 - 상속은 자원을 재사용하는 것을 목적으로 하며 이런 자원들은 모두 class에 담겨있다.(class는 함수와 변수(필드)로 구성됨) - 우리는 한 개의 클래스를 다중 클래스로, 다중 클래스를 하나의 클래스로 자유롭게 변환하는 방법을 알아야 함 상속 사용시 핵심 개념은 ① 상속 후 자원을 찾을 땐 사용하는 클래스부터 자원을 찾음 즉, 부모 자원보다 자식 자원을 먼저 활용함 ② interface 상속은 꼭 구현체가 있는 클래스가 필요하다 부모클래스 먼저 선언 후 자식 클래스 선언 (interface 클래스 명) (참조변수) = new (자식 클래스); 기초자료형도 object다! 왜냐면~~ wrapper class를 통..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/xbWR0/btqzktaabmQ/l9z1S7KUNIxiD9p4uz79PK/img.png)
인터페이스는 new 키워드로 인스턴스할 수 없으며 import와 static키워드를 이용해서 인스턴스하며 추상함수는 구현부가 존재하지 않기때문에 구현부를 따로 만들어서 작동해야함 단, main클래스를 바로 인스턴스하는 것이 아니라 부모 클래스(인터페이스) 참조변수 = new 자식클래스(); 라는 형식을 통해서 사용해야한다 >> 인터페이스를 통해서 나중에 통제하기 쉽도록, 인터페이스를 지나쳐서 가도록함
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/SQaVi/btqzjrXeiFY/ZDeATmoLtDqzfrBc11XtSk/img.png)
- 상속에서의 함수는 크게 일반 함수와 추상 함수로 나뉘며, 추상 함수는 기능이 없는 “빈껍데기” 라고 생각하면 편하다~! =부모 클래스가 추상 & 인터페이스인 경우 추상함수는 자식클래스에 무조건 오버라이딩(=통제기능)할 것, 인스턴스 안된다면 바로 오류가 뜸 @ ; 어노테이션 : 명시적으로 표현하거나 실제 기능을 구현하는 두가지 기능이 존재함 @Override : 오버라이딩 어노테이션 ; 해당함수가 오버라이드 됐다고 명시적으로 표현함
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/l6Pwu/btqzjfbDdzI/evNYAzFB3g2UBKBWkBhW3K/img.png)
- 오버로딩overloading : 같은 클래스에서 함수 이름이 같고, 매개변수(파라미터)가 다른 함수가 존재하는 경우 대표적으로 System패키지가 예시! 오버로딩된 함수를 부를 때에는 매개변수에 맞춰서 부르면 알아서 맞는 정보가 들어옴 * 외에도 상속관계에서 자원을 찾는데 동일한 이름의 함수가 여럿 존재하는 경우 a 본인에게 있는 함수 >> b 상속받는곳에 있는 함수 >> c 조상(object)에 있는 함수 순서대로 값이 나옴(가까운 순서대로) 오버라이딩Overriding : 조상 클래스로 부터 상속받은 함수의 내용을 그대로 사용하거나 변경하는 것으로, 생성자는 오버라이딩하지 않는다 - 이름이 같고, 매개변수가 같고, 반환타입이 같아야 함(단, 반환타입을 자손 클래스 타입으로 반환하는 거 가능) : ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/HuuO3/btqzgomulYC/8QxwaZ9AV1kA7wTPCaAnF1/img.png)
Ragged Array : 가변배열 : 1차원배열(행)은 고정되어있으나 열은 고정되지않고 값을 자유롭게 넣어줌 int iV[] [] = new int[3] [4] iV배열의 길이를 조정할때, [][]안에 들어가는 숫자는 지정된 길이(인덱스가 아님) 반대로 println(iV[0]); 에서 0이 의미하는 건 인덱스로, 실제 길이의 -1를 한 숫자임 인덱스 활용 함수 - 참조변수.substring(시작 인덱스) : 첨자 사용하는 함수로, String class에 존재하며, 복사할 시작점을 인덱스로 지정하여 끝까지 복사함 - 참조변수.substring(시작 인덱스, 끝나는 인덱스) : 복사할 시작점과 끝나는 지점을 인덱스 숫자로 지정함
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/expqVu/btqzgpkG8vg/zxLRzuW1POo5JIY2l6XUk1/img.png)
- 모든 객체(object, 참조변수)를 사용하는 경우 늘 null값으로 초기화해야함 - built-in 객체에 데이터타입 선언 후 null로 초기화하면 참조변수는 사용할 수 없다 >> 다시 값을 넣어줘야 함 - null은 빈 값 = 길이가 존재하지 않는다, “ ”으로 초기화하는 경우 길이 값이 0으로 나옴 : java.lang.NullPointerException : 데이터가 없는데 사용하려고 하는 경우 발생하는 오류로, 데이터가 존재하지 않기 때문에 길이를 구할 수 없음 = 데이터에 “ ”에도 길이값은 존재하기 때문에 조건의 유효범위 점검시 null값과 “ ”에 대한 오류를 모두 판단( ⑥ flow controll 참조 )