형식
public class 자식클래스 extend 부모클래스 {
자식클래스에서는 부모클래스의 필드와 메소드를 상속받아 사용 가능
}
부모클래스 참조변수 = new 부모클래스(); = 가능
자식클래스 참조변수 = new 자식클래스(); = 가능
자식클래스 참조변수 = new 부모클래스(); = 불가능 - 에러 발생
package inheritance;
// 회원정보(아이디, 이름)를 저장하기 위한 클래스
public class Member {
// 필드
private String id;
private String name;
// 매개변수가 없는 생성자
public Member() {
}
// 매개변수가 있는 생성자
public Member(String id, String name) {
this.id = id;
this.name = name;
}
// Getter & Setter
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 메소드
public void display() {
System.out.println("아이디 = " + id);
System.out.println("이름 = " + name);
}
}
public class MemberEvent extends Member {
/*
// 부모클래스로부터 상속받은 필드 또는 메소드 작성 불필요
private String id;
private String name;
*/
private String email;
public MemberEvent() {
// 부모클래스의 매개변수가 없는 기본 생성자를 호출하는 명령 - 생략 가능
super();
}
// 받은 매개변수를 super 키워드로 부모 클래스로 넘겨주면 필드에 들어감
public MemberEvent(String id, String name, String email) {
super(id, name);
this.email = email;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
// 오버라이딩
@Override
public void display() {
// 부모클래스의 숨겨진 메소드 호출
super.display();
System.out.println("이메일 = " + email);
}
}
package inheritance;
public class MemberApp {
public static void main(String[] args) {
Member member1 = new Member();
member1.setId("abc123");
member1.setName("홍길동");
member1.display();
System.out.println("=========================================");
Member member2 = new Member("xyz456", "임꺽정");
member2.display();
System.out.println("========================================");
// Member 클래스를 상속받은 MemberEvent를 가지고 호출
MemberEvent member3 = new MemberEvent("2020", "전우치", "abcdefg@naver.com");
package inheritance;
// 상속관계의 클래스에서 참조변수와 객체와의 관계
public class MemberCastApp {
public static void main(String[] args) {
// 부모클래스 참조변수 = new 부모클래스();
Member member1 = new Member();
// 참조변수로 부모클래스의 객체를 참조하여 부모클래스의 메소드 호출
member1.setId("abc123");
member1.setName("홍길동");
member1.display();
System.out.println("===========================================");
// 자식클래스 참조변수 new 자식클래스();
MemberEvent member2 = new MemberEvent();
member2.setId("abc123");
member2.setName("임꺽정");
member2.setEmail("opq@itwill.xyz");
member2.display();
System.out.println("===========================================");
// 자식클래스 참조변수 = new 부모클래스();
// MemberEvent member3 = new Member();
System.out.println("===========================================");
// 부모클래스 참조변수 = new 자식클래스(); // 가능
Member member4 = new MemberEvent();
// 참조변수로 부모클래스의 객체를 참조하여 부모클래스의 메소드 호출
member4.setId("xyz567");
member4.setName("전우치");
// 명시적 객체 형변환
/*
MemberEvent event = (MemberEvent) member4;
event.setEmail("adsfasfs@itwill.xyz");
*/
((MemberEvent) member4).setEmail("opq@itwill.xyz");
// 오버라이딩 선언된 메소드 호출
member4.display();
System.out.println("===========================================");
}
}