진도좀 팍팍 나갔으면 좋겠는데..
못따라오시는 분들이 계셔서 진도가 많이 늦네요 ㅠㅠ.
2차원배열의 생성과 접근
int[][] arr = new int[3][4];
- 세로 길이가 3, 가로 길이가 4인 int형 2차원 배열의 생성
String[][] arr3 = new String[3][7];
- 세로 길이가 3, 가로 길이가 7인 String형 2차원 배열의 생성
arr[1][0] = 5;
- 세로, 가로의 인덱스 위치가 각각 1,0인 요소에 5를 저장
2차원배열의 구조
arr.length의 차이에 따른 열과 행의 차이를 보시오.
2차원배열의 초기화
1차원 배열과 마찬가지로 2차원 배열도 생성과 동시에 초기화가 가능하다.
상속의 기본문법 이해
상속은 연관된 일련의 클래스들에 대해 공통적인 규약을 정의할 수 있다.
상속은 기존에 정의된 클래스에 메소드와 변수를 추가하여 새로운 클래스를 정의하는 것이다.
상속의 호출순서는
- 하위 클래스 인스턴스 생성 시 상위클래스 생성자 호출 후 하위 클래스 생성자를 호출한다.
상속관계에 있는 두 클래스의 적절한 생성자 정의
- 자바는 상속 관계에 있을지라도, 상위 클래스의 멤버는 상위 클래스의 생성자를 통해서 초기화하도록 유도하고 있다. 적절한 생성자 정의는 예시를 통해 보도록 하자.
- Man 클래스가 상위클래스이고 생성자를 통한 초기화를 하고 있다.
- Man 클래스를 상속받는 BusinessMan 클래스에서 super(name)으로 상위 클래스의 생성 자를 호출하고 있다.
static 선언이 붙은 ‘클래스 변수’와 ‘클래스 메소드’의 상속
클래스 변수와 클래스 메소드의 특징은
인스턴스의 생성과 상관이 없이 접근이 가능하다.
클래스 내부외 외부에서 (접근수준지시자가 허용하면) 접근이 가능하다.
클래스 변수와 클래스 메소드가 위치한 클래스 내에서는 직접 접근이 가능하다.
이다.
즉, 클래스 변수와 클래스 메소드는 인스턴스에 속하지 않는 딱 하나만 존재하는 변수와 메소드이다.
상위 클래스와 마찬가지로 이를 상속하는 하위 클래스에서도 이름만으로 클래스 변수와 클래스 메소드에 접근이 가능하다.(접근수준 지시자가 허용하면)
상속의 기본조건 IS-A 관계
하위 클래스는 상위 클래스의 모든 특성을 지닌다.
거기에 더하여 하위 클래스는 자신만의 추가적인 특성을 더하게 된다.
IS-A 관계는 ‘~은 ~이다.’로 표현되는 관계이다.
Ex) 노트북은 컴퓨터이다. 전기자동차는 자동차이다.
메소드 오버라이딩
모바일 폰을 상속하는 스마트폰의 관계를 예시로 들어보면
class SmartPhone extends MobilePhone {...}
SmartPhone phone = new SmartPhone(“010-555-777”, “Nougat”); 같이 문장을 구성할 수도 있지만
MobilePhone phone = new SmartPhone(“010-555-777”, “Nougat”);
과 같이 MobilePhone형 참조변수가 SmartPhone 인스턴스를 참조하게 할 수 있다.
대신 이때 MobilePhone phone 인스턴스는 SmartPhone의 메소드를 호출하지 못한다. ph2가 참조한 인스턴스 변수가 무엇이든 상관없이 ph2는 MobilePhone형 참조변수 이기 때문이다.
클래스의 상속과 참조변수의 참조 가능성에 대한 정리
참조변수가 참조하는 인스턴스의 종류에 상관없이, 참조변수의 형에 해당하는 클래스와 그 클래스가 상속하는 상위 클래스에 정의된 메소드들만 호출이 가능하다.
참조변수 간 대입과 형 변환
class Cake { public void sweet() {...} }
class CheeseCake extends Cake{ public void milky() {...} }
같은 형태일 때, CheeseCake 인스턴스는 Cake인스턴스이기도 하니
ChessCake ca1 = new CheeseCake();
Cake ca2 = ca1 ; 이 가능하다.
그러나
Cake ca3 = new CheeseCake();
CheeseCake ca4 = ca3; 은 불가능하다.
메소드 오버라이딩(Method Overridng)
상위 클래스에 정의된 메소드를 하위 클래스에서 다시 정의하는 행위이다.
오버라이딩 = ‘무효화 시키다’의 뜻으로 해석된다.
메소드의 이름, 메소드의 반환형, 메소드의 매개변수 선언이 같아야 성립한다.
클래스 변수와 클래스 메소드는 오버라이딩 대상이 아니다.
메소드 오버라이딩의 일반화와 오버라이딩 된 메소드를 호출하는 방법
instanceof 연산자
if (ca instanceof cake)
위에서 ca는 참조변수이고 Cake는 클래스의 이름이다.
ca가 참조하는 인스턴스가 Cake의 인스턴스이거나 Cake를 상속하는 클래스의 인스턴스이면 true를 그렇지 않으면 false를 반환한다.