기존의 클래스를 재사용하여 새로운 클래스를 작성하는 자바의 문법 요소
하위 클래스는 상위 클래스가 가진 모든 멤버 상속
~ 클래스로부터 확장되었다. / 하위클래스의 멤버 개수는 상위 클래스보다 같거나 많다.
자바는 단일 상속만을 허용함.
상속 정의
class Programmer extends Person //Person 클래스로부터 상속
class Person {
String name;
void eat(){
System.out.println("밥먹기");
};
}
class Programmer extends Person {// Person 클래스로부터 상속
void coding(){
System.out.println("코딩하기");
};
}
public class HelloJava {
public static void main(String[] args){
//person 객체 생성
Person p = new Person();
p.name = "홍길동"
p.eat();
System.out.println(p.name);
//Programmer 객체 생성
Programmer pg = new Programmer();
pg.name = "김철수" // 상속받은 필드
pg.eat(); //상속받은 메서드
pg.coding() // 개별 메서드
System.out.println(pg.name);
}
}
// 출력
밥먹기
홍길동
밥먹기
코딩하기
김철수
상속 관계 : ~은 ~ 이다
(IS-A)
포함 관계 : ~은 ~ 을 가지고 있다 (HAS-A)
오버라이딩이 되는 조건
- 메서드의 선언부(메서드명,매개변수,반환타입)이 상위클래스의 메서드와 일치
- 접근제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 한다.
- 예외는 상위클래스의 메서드보다 많을 수 없다.
class Car { void stop() { System.out.println("Car stop"); } } public class SportsCar extends Car { // Car 클래스로부터 상속 void stop() { System.out.println("SportsCar stop");// 메서드 오버라이딩 } public static void main(String[] args) { SportsCar car = new Car(); car.stop(); } }// "SprotsCar stop"
super - 상위 클래스의 객체super() - 상위 클래스의 생성자 호출public class Super {
public static void main(String[] args) {
Lower a = new Lower();
a.callNum();
}
}
class Upper {
int count = 10; // super.count
}
class Lower extends Upper {
int count = 5; // this.count 구별 필요
void callNum() {
System.out.println("count = " + count); //가장 가까운
System.out.println("this.count = " + this.count);
System.out.println("super.count = " + super.count);
}
} //출력
count = 5
count = 5
count = 10
super() 사용 예제
super() 메서드도 생성자 안에서만 사용 가능, 반드시 첫 줄에 위치public class Test {
public static void main(String[] args) {
Singer s = new Singer();
}
}
class Person {
Person() {
System.out.println("사람 클래스 생성자");
}
}
class Singer extends Person { // Person 클래스로부터 상속
Singer() {
super(); // Person 클래스의 생성자 호출
System.out.println("가수 클래스 생성자");
}
}
Object클래스는 최상위에 위치한 상위클래스.
아무 상속도 받지 않는 클래스에 자동적으로 추가됨.
Object 클래스의 대표 메서드
toString()= 객체 정보를 문자열로 출력equals(Object obj)= 등가 비교 연산(==) 과 동일하게 스택 메모리값을 비교hashCode()= 객체의 위치정보 관련, 해쉬테이블 또는 해쉬맵에서 동일 객체여부
. 으로 표현packge 패키지명 표시package practicepkg.test; //패키지 구문 포함
public class PackageEx {
}
import 패키지명.클래스명; 또는 import 패키지명.*;
import 패키지명.* = 해당 패키지의 모든 클래스 사용

package package1; // 패키지명 package1
//파일명: Parent.java
class Test { // Test 클래스의 접근 제어자는 default
public static void main(String[] args) {
Parent p = new Parent();
// System.out.println(p.a); // 동일 클래스가 아니어서 에러 발생
System.out.println(p.b);
System.out.println(p.c);
System.out.println(p.d);
}
}
public class Parent { // Parent 클래스의 접근 제어자는 public
private int a = 10; // a,b,c,d에 각각 private, default, protected, public 접근제어자 지정
int b = 20;
protected int c = 30;
public int d = 40;
public void printEach() { // 동일 클래스이기 때문에 에러발생하지 않음
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
private 접근제어자가 포함되어 있는 객체의 변수 데이터 값을 추가/수정 하고 싶을때
setter 메서드: 외부에서 메서드에 접근하여 조건에 맞을 경우 데이터 값 변경 가능 (메서드는 공개)
일반적으로 메서드명에set-을 붙여서 정의getter 메서드: 이렇게 설정한 변수 값을 읽어오는데 사용
일반적으로 메서드명에get-을 붙여서 정의- alt + insert 자동완성
오늘은 학습전에 객체지향개념 파트가 어렵게 느껴져서 자바의정석 강의를 빠르게 듣고 학습을 했다. 아무것도 모른채로 공부하는 것보다 훨씬 이해가 잘되었다. 객체지향 파트는 여러 부가적인 학습자료로 더 공부해보아야 할 것 같다.