[Java의 정석] Chapter07 객체지향 프로그래밍2

zoey·2023년 9월 30일
0

Java의 정석

목록 보기
4/9

2023/09

1 상속

1.1 상속의 정의와 장점

1.2 클래스간의 관계 - 포함관계

1.3 클래스간의 관계 결정하기

1.4 단일상속(single inheritance)

1.5 Object클래스 - 모든 클래스의 조상

2 오버라이딩(overriding)

2.1 오버라이딩이란?

2.2 오버라이딩의 조건

2.3 오버로딩 vs 오버라이딩

2.4 super

super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다. 멤버변수와 지역변수의 이름이 같을 때 this를 붙여서 구별했듯이 상속받은 멤버와 자신의 멤버 이름이 같을 때에는 super를 붙여서 구별할 수 있다.

class SuperTest {
	public static void main(String args[]){
    	Child c = new Child();
        c.method();
    }
}

class Parent {
	int x=10;
}

class Child extends Parent{
	void method{
    	System.out.println("x=" + x); //x=10
        System.out.println("this.x=" + this.x); //this.x=10
        System.out.println("super.x=" + super.x); //this.x=10
    }
}
class SuperTest2{
    public static void main(String args[]){
    	Child c = new Child();
        c.method();
    }
}
class Parent{
	int x = 10;
}
class Child extends Parent{
	int x = 20;
    void method(){
    	System.out.println("x=" + x); //x=20
        System.out.println("this.x=" + this.x); //this.x=20
        System.out.println("super.x=" + super.x); //this.x=10
    }
}

같은 이름의 멤버변수가 조상 클래스인 Parent에도 있고 자손 클래스인 Child클래스에도 있을 때는 super.x와 this.x는 서로 다른 값을 참조하게 된다.
super.x는 조상 클래스로부터 상속받은 멤버변수 x를 뜻하며, this.x는 자손 클래스에 선언된 멤버변수를 뜻한다.
이처럼 조상 클래스에 선언된 멤버변수와 같은 이름의 멤버변수를 자손 클래스에서 중복 정의하는 것이 가능하며, 참조변수 super를 이용해서 서로 구별할 수 있다.

변수만이 아니라 메서드 역시 super를 써서 호출할 수 있다. 특히 조상 클래스의 메서드를 자손 클래스에서 오버라이딩 한 경우에 super를 사용한다

class Point {
	int x;
    int y;
    String getLocation(){
    	return "x :" + x + "y :" + y;
    }
}
class Point3D extends Point{
	int z;
    String getLocation(){ //오버라이딩
    	//return "x :" + x + ",y :" + y, ",z :" + z; 
        return super.getLocation() + ", z:" + z; //조상의 메서드 호출
   	}
}

2.5 super() - 조상 클래스의 생성자

3 package와 import

3.1 패키지(package)

3.2 패키지의 선언

3.3 import문

3.4 import문의 선언

3.5 static import문

4 제어자(modifier)

4.1 제어자란?

4.2 static - 클래스의, 공통적인

4.3 final - 마지막의, 변경될 수 없는

4.4 abstruct - 추상의, 미완성의

4.5 접근제어자(access modifier)

접근제어자는 멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다

접근제어자가 사용될 수 있는 곳 - 클래스, 멤버변수, 메서드, 생성자
private - 같은 클래스 내에서만 접근이 가능하다
protected - 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능하다
default - 같은 패키지 내에서만 접근이 가능하다 (패키지에 관계 없이 상속 관계에 있는 자손 클래스에서 접근할 수 있도록 하는 것이 제한 목적이지만, 같은 패키지 내에서도 접근이 가능하다. 그래서 protected가 default보다 접근 범위기 더 넓다)
public - 접근 제한이 전혀 없다

public class Time {
	private int hour;
    private int minute;
    private int second;
    
    public int getHour(){
    	return hour;
    }
    public void setHour(int hour){
    	if(hour<0 || hour23) return;
        this.hour = hour;
    }
    
    public int getMinute(){
    	return minute;
    }
    public void setMinute(){
    	if(minute < 0 || minute > 59) return;
        this.minute = minute;
    }
    
    public int getSecond(){
    	return second;
    }
    public void setSecond(){
    	if(second < 0 || second > 59) return;
        this.second = second;
    }
    
}

4.6 제어자(modifier)의 조합

5 다형성(polymorphism)

5.1 다형성이란?

5.2 참조변수의 형변환

class Car {
	String color;
    int door;
    void drive(){ //운전하는 기능
    	System.out.println("drive, Brrr~~~");
    }
    void stop(){ //멈추는 기능
    	System.out.println("stop!!!");
    }
}

class FireEngine extends Car { //소방차 
	void water(){ //물 뿌리는 기능
    	System.out.println("water!!!");
    }
}

class Ambulance extends Car { //앰뷸런스
	void water(){ //사이렌을 울리는 기능
    	System.out.println("siren~~~");
    }
}
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = null

car = fe; //car = (Car)fe;에서 형변환 생략됨. 업캐스팅
fe2 = (FireEngine)car //형변환 생략 불가. 다운캐스팅

5.3 instanceof 연산자

5.4 참조변수와 인스턴스의 연결

5.5 매개변수의 다형성

5.6 여러 종류의 객체를 배열로 다루기

6 추상클래스 (abstract class)

6.1 추상클래스란?

6.2 추상메서드(abstract method)

6.3 추상클래스의 작성

7 인터페이스(interface)

7.1 인터페이스란?

7.2 인터페이스의 작성

7.3 인터페이스의 상속

7.4 인터페이스의 구현

7.5 인터페이스를 이용한 다중 상속

7.6 인터페이스를 이용한 다형성

7.7 인터페이스의 장점

7.8 인터페이스의 이해

7.9 디폴트 메서드와 static메서드

8 내부 클래스(inner class)

8.1 내부 클래스란?

8.2 내부 클래스의 종류와 특징

8.3 내부 클래스의 선언

8.4 내부 클래스의 제어자와 접근성

8.5 익명 클래스(anonymous class)

0개의 댓글