728x90
2023.01.11 - [JAVA/Java 기초] - 싱글톤 패턴.java
싱글톤 패턴.java
2023.01.11 - [JAVA/Java 기초] - Getter & Setter .java Getter & Setter .java 2023.01.11 - [JAVA/Java 기초] - 패키지.java 패키지.java 2023.01.11 - [JAVA/Java 기초] - 인스턴스 멤버, static, final ... 인스턴스 멤버, static, final ... 20
less-go.tistory.com
상속이란?
부모 클래스의 필드와 메소드를 자식 클래스에게 물려줄 수 있습니다.

상속의 이점
- 이미 개발된 클래스를 재사용 하므로 중복 코드를 줄입니다.
- 클래스 수정을 최소화 합니다.
클래스 상속
- 자식클래스를 선언 할때 어떤 부모로부터 상속받을것인지 결정하고, 부모클래스를 다음과 같이 extends 뒤에 기술합니다.
public class 자식클래스 extends 부모클래스 {
}
- 다중 상속 허용하지않습니다. extends 뒤에 하나의 부모 클래스만 상속합니다.

예제로, phone 클래스를 상속받는 Smartphone을 이용해 메인메소드를 실행 시켜보겠습니다.
//부모클래스 phone
public class phone {
public String model;
public String color;
public void bell() {
System.out.println("벨이 울립니다.");
}
public void sendVoice(String message) {
System.out.println("자기 : " + message);
}
public void recivevoice(String message) {
System.out.println("상대방 : " + message);
}
public void hangUp() {
System.out.println("전화를 끊습니다.");
}
}
//자식 클래스 : SmartPhone
public class SmartPhone extends phone {
public boolean wifi;
public SmartPhone(String model, String color) {
this.model = model;
this.color = color;
}
public void setWifi(boolean wifi) {
this.wifi = wifi;
System.out.println("와이 파이 상태를 변경했습니다.");
}
public void internet() {
System.out.println("인터넷에 연결합니다.");
}
}
//실행 메소드
public class SmartPhoneExam {
public static void main(String[] args) {
SmartPhone myPhone = new SmartPhone("갤럭시", "은색");
System.out.println("모델 : " + myPhone.model);
System.out.println("색상 : " + myPhone.color);
System.out.println("와이파이 상태 : " + myPhone.wifi);
myPhone.bell();
myPhone.sendVoice("여보세요");
myPhone.recivevoice("안녕하세요! 저는 홍길동입니다.");
myPhone.sendVoice("아~네, 반갑습니다.");
myPhone.hangUp();
myPhone.setWifi(true);
myPhone.internet();
}
}
//부모 클래스 : 사람
class Person{
void breath() {
System.out.println("숨쉬기");
}
void eat() {
System.out.println("먹기");
}
void say() {
System.out.println("말하기");
}
}
//클래스 학생 : 자식 클래스
class Student extends Person{ //상속시에는 반드시 부모 클래스는 하나만 지정 가능
void learn() {
System.out.println("배우기");
}
}
//클래스 선생 : 자식 클래스
class Teacher extends Person{
void teach() {
System.out.println("가르치기");
}
}
public class Inheritance1 extends Student{
public static void main(String[] args) {
Student s1 = new Student(); // 학생 객체 s1 생성
s1.breath(); // 학생 클래스에는 breath() 기능이 정의 되어 있지 않습니다.
// breath()는 class student의 부모클래스인 class Person에서 정의
s1.learn();
Teacher t1 = new Teacher();
t1.eat(); // eat()은 부모가 가진 메서드
t1.teach(); // teach() Teacher 클래스 정의된 메서드
}
}
세번째 예제를 들어보겠습니다.
해당 예제에서는 get, set, contentEquals(), super 가 나옵니다.
contentEquals()와 equals()는 문자열비교의 기능적으로는 큰 차이가 없으나,
자료형이 다를때 사용되는 폭이 contentEquals()가 좀더 넓습니다.
// 부모클래스 : Student
public class Student {
protected String name;
protected int number;
public Student(){
name = "";
number = 0;
}
// 이름을 매개변수 값으로 초기화 하면서 Student 객체를 생성합니다.
public Student(String Name, int Number) {
setName(Name); // setName 메소드를 입력받은 매개변수 Name으로 실행시켜줍니다. --1
setNumber(Number); // setNumber 메소드를 입력받은 매개변수 Number로 실행시켜줍니다. --1
}
public String getName() {
return name;
}
public int getNumber() {
return number;
}
public void setName(String name) {
this.name = name; // 입력받은 Name으로 setName 메소드 실행후 Student의 name 필드값을 위에서 입력받은 Name으로 변경해줍니다. --2
}
public void setNumber(int Number) {
this.number = Number; // 입력받은 Number로 setNumber 메소드 실행후 Student의 number 필드값을 위에서 입력받은 Number로 변경합니다 --2
}
public String toString() {
return ("이름: " + name + ", " + "학번 : " + number);
}
//현 객체의 현재 상태가 other 객체와 같은지 알려줍니다.
public boolean equals(Student other) {
return(this.name.equals(other.name))&&(this.number == other.number);
}
}
// 자식클래스 : Undergradute
public class Undergradute extends Student{
//대학생의 소속 동아리명을 지정하는 객체변수
private String clubName;
//학부생의 변수 값을 기본값으로 초기화 하면서 객체를 생성
public Undergradute() {
super(); // 부모 클래스의 생성자 메소드를 호출
clubName = "";
}
// 학부생의 변수들 값을 매개변수 값으로 초기화하면서 객체를 생성합니다.
public Undergradute(String Name, int Number, String ClubName) {
super(Name, Number);
setClubName(ClubName);
}
public String getClubName() {
return clubName;
}
public void setClubName(String ClubName) {
this.clubName = ClubName;
}
//현 객체의 현재 상태를 나타내는 문자열을 반환합니다.
public String toString() {
return super.toString() + ", 동아리 이름: " + getClubName();
}
//현 객체의 현재 상태가 other 객체와 같은지를 알려줍니다.
public boolean equals(Undergradute other) {
return(super.equals(other)) && (this.clubName.equals(other.clubName));
}
}
// 실행 메소드
public class Driver {
public static void main(String[] args) {
Undergradute understu1 = new Undergradute();
understu1.setName("선남");
understu1.setNumber(1601);
understu1.setClubName("로봇");
System.out.println(understu1.toString());
Undergradute understu2 = new Undergradute("선녀", 1602, "독서");
System.out.println(understu2.toString());
if (understu1.equals(understu2)) {
System.out.println("두 객체가 서로 같다.");
}else {
System.out.println("두 객체가 서로 다르다.");
}
}
}
결과:
이름: 선남, 학번 : 1601, 동아리 이름: 로봇
이름: 선녀, 학번 : 1602, 동아리 이름: 독서
두 객체가 서로 다르다.
자바에서 상속이 가능하지 않은 경우
클래스 앞에 final 이 붙은 경우 상속이 불가능 합니다.
tip ) Ctrl + t 를 입력하면 상속관계를 확인할수 있습니다.
728x90
'JAVA > Java 기초' 카테고리의 다른 글
| 오버라이딩(overriding).java (0) | 2023.01.12 |
|---|---|
| 클래스와 인스턴스 등...(리마인드용) (0) | 2023.01.12 |
| static 이란? (0) | 2023.01.11 |
| 싱글톤 패턴.java (0) | 2023.01.11 |
| Getter & Setter .java (0) | 2023.01.11 |