부모클래스
상위 클래스, 슈퍼 클래스
자식클래스
하위클래스, 상속 클래스
this
인스턴스 자신을 가리키는 참조변수
this()
같은 클래스의 다른 생성자를 호출할 때 사용
super
부모, 자식 클래스의 변수/메서드 이름이 똑같을 때 구분위해 사용한다. 부모 클래스의 클래스 멤버 앞에 붙여준다.
super()
자식 생성자 안에서 부모 클래스의 생성자를 호출할 때 사용한다. object클래스를 제외한 모든 클래스의 첫줄에 생성자, this() 또는 super()를 호출해야한다. 이유는 자식 클래스 멤버가 부모 클래스 멤버를 사용할 수 있기 때문에 부모의 멤버들이 먼저 초기화 되어 있어야 하기 때문이다. 생성자를 첫줄에 호출하징 않으면 컴파일러가 자동으로 super()를 생성자의 첫줄에 삽입한다.
올바른 방법으로 접근하는 경우 단일 상속이 다중 상속보다 안전하다. 또한 파생 클래스 또는 상위 클래스 생성자에서 이 메서드가 재정의된 경우 파생 클래스가 특정 메서드에 대해 상위 클래스 구현을 호출할 수 있다.
String course[] = {"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드"}; int score[] = {95, 88, 76, 62, 55};
그리고 다음 예시와 같이 과목 이름을 입력받아 점수를 출력하는 프로그램을 작성하라. "그만"을 입력받으면 종료한다. (Java는 인덱스 0에 있으므로 score[0]을 출력)
과목 이름 >> Jaba
없는 과목입니다.
과목 이름 >> Java
Java의 점수는 95
과목 이름 >> 안드로이드
안드로이드의 점수는 55
과목 이름 >> 그만
[Hint] 문자열을 비교하기 위해서는 String 클래스의 equals()메소드를 이용해야 한다.String name; if(course[i].equals(name)) { int n = score[i]; ... }
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] course = { "Java", "C++", "HTML5", "ComputerStructure", "Android" };
int[] score = { 95, 88, 76, 62, 55 };
while (true) {
String name = sc.next();
boolean missMatch = false;
for (int i = 0; i < course.length; i++) {
if (name.equals("Stop") || name.equals("stop")) {
System.exit(0);
}
if (course[i].equals(name)) {
System.out.println("Class Name >> " + course[i]);
System.out.println("Score of " + course[i] + " is " + score[i]);
break;
}
else if(course[i] != name) {
missMatch = true;
break;
}
}
if (missMatch) {
System.out.println("Be not class");
}
continue;
}
}
}
instanceof 연산자는 생성자의 prototype 속성이 객체의 프로토타입 체인 어딘가 존재하는지 판별한다.
public static void main(String[] args) {
Friend[] frns = new Friend[10];
int cnt = 0;
frns[cnt++] = new UnivFriend("LEE", "Computer", "010-333-555");
frns[cnt++] = new UnivFriend("SEO", "Electronics", "010-222-444");
frns[cnt++] = new CompFriend("YOON", "R&D 1", "02-123-999");
frns[cnt++] = new CompFriend("PARK", "R&D 2", "02-321-777");
// 모든 동창 및 동료의 정보 전체 출력
for(int i = 0; i < cnt; i++) {
frns[i].showInfo(); // 오버라이딩 한 메소드가 호출된다.
System.out.println();
}
}
//부모클래스
public class Friend {
protected String name;
protected String phone;
public Friend(String name, String phone) {
this.name = name;
this.phone = phone;
}
public void showInfo() {
System.out.println("Name : " + name);
System.out.println("Phone : " + phone);
}
}
public class CompFriend extends Friend {
private String department;
public CompFriend(String name, String department, String phone) {
super(name, phone);
this.department = department;
// showInfo();
// System.out.println();
}
@Override
public void showInfo() {
super.showInfo();
System.out.println("Department : " + department);
}
}
public class UnivFriend extends Friend {
private String major;
public UnivFriend(String name, String major, String phone) {
super(name, phone);
this.major = major;
// showInfo();
// System.out.println();
}
@Override
public void showInfo() {
super.showInfo();
System.out.println("Major : " + major);
}
}