ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이것이 자바다 7장 상속
    JAVA/JAVA 2022. 6. 23. 11:11

    상속

    부모클래스의 멤버를 자식 클래스에 물려주는 것 

    상속대상(부모의 필드와 메소드)

     

    상속의 효과

    부모 클래스 재사용해 자식 클래스 빨리 개발 가능

    반복된 코드 중복 줄임

    유지보수

    객체의 다형성 구현가능

     

    자식 객체 생성하면 부모 객체도 생성됨

     

    명시적인 부모 생성자 호출

    - super()는 부모의 기본 생성자를 호출한다.

    - 부모클래스에 기본 생성자가 없고, 매개 변수가 있는 생성자만 있다면 반드시 자식 생성자에서 부모 생성자 호출을 위해 super(매갯값, ...)를 명시적으로 호출해야 한다.

    - 반드시 자식생성자 첫 줄에 위치

    public class Parent {
    	String model;
    	String color;
    	Parent(String model, String color) {
    		this.model = model;
    		this.color = color; 
    	}
    	void powerOn() {
    		System.out.println("전원을 켭니다.");
    	};
    	void powerOff() {
    		System.out.println("전원을 끕니다. ");
    	};
    }
    public class Child extends Parent {
    	
    	int channel;
    	Child(String model, String color, int channel) {
    		super(model, color);
    		this.channel = channel;
    	}
    	void powerOn() {
    		System.out.println("[Child] 전원을 켭니다.");
    	};
    	
    }
    public class inheritP {
    
    	public static void main(String[] args) {
    		Child child = new Child("jump","검은색", 100);
    		child.powerOn(); // [Child] 전원을 켭니다."
    		child.powerOff(); // 전원을 끕니다. 
    	}
    
    }

    메소드 재정의 (@Override)

    메소드 오버라이딩은 자식 클래스에서 동일한 메소드를 재정의하는 것을 말한다.
    메소드가 오버라이딩 되었다면, 부모 클래스의 메소드 대신에 오버라이딩된 자식 메소드가 호출된다.

    - 부모 메소드와 동일한 리턴타입, 메소드 이름, 변수 리스트

    - 접급제한자를 더 강하게 오버라이딩할 수 없다.

    - 새로운 예외(Exception)을 throws할 수 없다.

     

    부모 메소드 호출(super)

    메소드 오버라이딩 시 부모 클래스의 메소드를 사용하고 싶으면 아래와 같이 호출할 수 있다.

    ㅇsuper.부모메소드(); 

     

    final 클래스와 final 메소드

    final 키워드는 해당 클래스/메소드가 최종 상태이므로 수정될 수 없음을 뜻한다.

    final 클래스 :  final 키워드를 붙이면 최종적인 클래스이므로 상속할 수 없다.

    final 메소드 : 최종적인 메소드이므로, 오버라이딩할 수 없는 메소드가 된다.

     

    protected 접근 제한자

    public : 모두 접근

    protected : 자식 클래스와 같은 패키지 클래스만 접근가능

    default : 다른 패키지에 소속된 클래스

    private : 모든 외부 클래스

     

    다형성

    같은 타입이지만 실행 결과가 다양한 객체 이용 가능한 성절

    - 부모 타입에는 모든 자식 객체가 대입 가능

    public class Animal {
    	String spec;
    	String color;
    }
    public class Cat extends Animal{	
    	String age;
    }
    public class AnimalP {
    	public static void main(String[] args) {
    		Animal animal = new Cat();
    	}
    }
    public class AnimalP {
    
    	public static void main(String[] args) {
    		Animal animal = new Cat();
    		System.out.println(animal.color);// O
    		System.out.println(animal.spec); // O
    		System.out.println(animal.age); // X 이건 안됨	
    	}
    }

    강제 타입 변환 (Casting)

    조건 : 자식 타입을 부모 타입으로 자동변환 후, 다시 자식 타입으로 변환 할때만 가능

    자식클래스 변수 = (자식클래스) 부모클래스 타입

     

    추상클래스

     

    추상 클래스의 개념

    추상은 실체 간에 공통되는 특성을 추출한 것을 말한다.

    예 : 새, 곤충, 물고기 -> 동물(추상)

    추상클래스 : 실체 클래스들의 공통되는 필드와 메소드를 정의한 클래스

    그렇기 대문에 추상 클래스는 실체 클래스의 부모 클래스 역할을 함.(단독 객체 X)

    추상 클래스의 용도

    - 실체 클래스의 공통된 필드와 메소드의 이름 통일

    - 시간 절약

    - 실체 클래스 설계 규격을 만들고자 할때

     

    추상 클래스 선언

    클래스 선언에 abstract 키워드 사용

    - New 연산자로 객체 생성하지 못하고, 상속 통해 자식 클래스만 생성 가능

    - 자식 클래스는 반드시 추상 메소드를 재정의 해서 실행 내용을 작성해야 한다.

      (Override하지 않는다면 에러가 발생)

    public abstract class Animal {
    	String spec;
    	String color;
    	abstract void sound();
    	void habit() {
    		System.out.println("밥먹기");
    	}
    }
    
    public class Cat extends Animal{
    	String age;
    	@Override
    	void sound() {
    		System.out.println("야옹");
    	}
    }
    
    public class AnimalP {
    	public static void main(String[] args) {
    		Cat cat = new Cat();
    		cat.sound(); // 야용
    		cat.habit(); // 밥먹기
    	}
    }

     

    'JAVA > JAVA' 카테고리의 다른 글

    이것이 자바다 정리 6장 (클래스)  (0) 2022.06.21
    이것이 자바다 정리 5장 (참조 타입)  (0) 2022.06.21
Designed by Tistory.