어제 과제로 받았던 NullPointException 등의 오류 나지않게 수정하기, 그부분에 대해 짚어주시면서 오늘 강의를 시작하셨다.
이런식으로 If 문 추가해서 배열에 저장된 연락처의 값이 등록되지않은 인덱스를 입력하거나 음수를 입력했을때 print문이 리턴될 수 있도록 코딩하였다.
상속(Inheritance)
이렇게 클래스가 있다고 했을때 Person의 데이터를 Student에게 상속해줄 수 있다.
개념적으로는 Student가 되기전에 Person이 되어야한다는 느낌이다.
상속은 부모클래스-자식클래스간의 관계인데 명칭은 여러가지가 있다.
그리고 기본 구조는 class 자식클래스 이름 extends 부모클래스 이름 {} 구조이다.
상속을 이용할때에는 여러 문법들이 존재하는데
상속을 이용했을 때 자식클래스의 생성자는 부모클래스의 생성자( super() )를 생략하고 있는 상태이다.
그리고 이 부모클래스의 생성자(super)는 그 어떤 문장보다도 생성자 내부에서 가장 처음에 등장해야한다.
즉 println 구문이나 this.school = school; 이나 그 뒤에 등장 할 수 없다는 의미이다. 부모가 있어야 자식이 있다는 느낌의 법칙이다.
이렇게 두개의 클래스가 서로 상속되어 있다고 생각해보자.
부모클래스는 파라미터가 있는 생성자를 만들었지만 기본생성자는 만들지 않았다.
그랬을때 자식클래스에서 기본생성자를 그냥 만들게 되면 에러가 발생된다. 전에 배웠듯이 자바에서는 파라미터가 있는 생성자를 만들게 되면 기본생성자는 자동으로 생성해주지 않는다.
즉 부모클래스에서 파라미터가 있는 생성자만 코딩을 했으므로 기본생성자는 만들어지지 않았고
자식클래스에서 기본생성자를 만들었을때 생성자 내부 가장 위에 있어야할 부모클래스의 기본생성자가 존재할수 없는것이다.
그래서 이때에는 부모클래스에 기본생성자를 만들어주던지 아니면 자식클래스에서 부모클래스의 argument를 갖는 생성자 super(0)을 호출해야 한다.
Overload/OverRide
자바에서 많이 중요한 개념이다. 확인해보고 가자!
그동안 오버로드 많이 사용해왔다. 오버로드는 메서드나 생성자에서 사용할 수 있고 한 클래스내에서 정의된다.
접근제어 수식어,반환자료형은 달라도 상관없지만 메소드명은 같아야한다. 대신 뒤에 파라미터의 순서,갯수,자료형 타입이 다르면 된다.
오버라이드의 경우 상속에서 쓰이는 개념인데, 메서드를 재사용하는 큰 장점이 있다.
다형성(polymorphism)
다형성의 경우 상속에서 큰 의미를 가지는 개념이다. 부모클래스와 자식클래스의 관계에서 하나의 객체를 사용 하여 연결할 수 있다는 의미이다. 구조는 "부모클래스 객체이름 = new 자식클래스" 이다.
다형성(polymorphism)과 타입 강제 형변환
부모클래스인 Parent와 자식클래스 Child와 AnotherChild가 있다고 했을때 부모 클래스와 자식클래스 간에는 다형성을 만들 수 있다. 이때 객체는 부모클래스의 Method들을 자유롭게 사용할 수 있지만 본인의 메서드는 보이지 않게된다. 이때 본인의 메서드를 활용하기 위해 타입 강제변환을 해준다.
구조는 "((자식클래스 이름) 다형성 객체).사용하고자하는 Method();"