Daily coding

Java Basic : day 9 - Inheritance 상속 1 - extends 예약어, 접근제어자, super 본문

Language/Java_basic

Java Basic : day 9 - Inheritance 상속 1 - extends 예약어, 접근제어자, super

sunnnkim 2019. 11. 29. 17:06

Inheritance 상속

 

 

 

* 접근제어자 ( 접근지정자 )

 

1. private
// 부모 클래스의 private 변수는 자식 객체에서 접근이 불가능 

2. public
// public 변수는 어디서든 접근이 가능 
// main 메소드에서도 접근이 가능하다 (하지만 은닉성이 결여되어 잘 사용하지 않음) 

3. protectedN
// protected 제어자는 부모클래스를 상속받은 클래스에서 사용이 가능하다. 
// 또한, protected 제어자는 같은 패키지안에서는 상속 관계가 아니어도 사용이 가능하다  
// (외부 패키지는 접근 허용 하지 않음) 
// 외부에서 접근하고 싶으면 getter/setter 메소드를 사용한다 
// main메소드에서는 당연히 사용 및 접근이 불가능하다  

 

 

 

 부모클래스 예제
class SuperClass{

          private String pri_name;
          public String pub_name;
          protected String pro_name;

          public SuperClass() {
                    //생성자
          }
          // 부모 메소드 
          public void Super_Method() {
                   System.out.println("SuperClass Super_method() 호출");
          }
}



상속 방법 : extends 키워드

 

// java 는 클래스의 다중 상속이 안됨

 

class ChildClass extends SuperClass{

          public ChildClass() {

                   // 생성자
          }          

          public void Child_func() {

                   // 부모메소드
                   System.out.println("Child_func() 호출");
          
          }

 


Override : 상속받은 함수를 재기입

 

// 오버라이딩 할 때는 파라미터와 반환값, 함수이름, 접근제어자가 모두 같아야함
// 그렇지 않으면 다른 함수가 되거나 오버로딩이 됨.

 

 

 

 

super 예약어

 

// 부모 클래스의 참조값을 의미한다.
public void Super_Method() {
          super.Super_Method();

          // super. : 부모클래스의 클래스 멤버를 호출 

          // 이경우에는 SuperClass의 메소드가 먼저 호출된다.


          System.out.println("ChildClass Class Super_method() 호출");
}

}

// 메인 메소드 
public class Lecture03_Inheritance {
        public static void main(String[] args) {


        ChildClass cc = new ChildClass();
        cc.Super_Method();
        // ChildClass에는 메소드가 없어도
        // 부모 클래스에 있는 메소드를 상속받아 사용할 수 있다.
   

        // 또한, 모든 클래스는 Object 라는 부모객체를 상속받고 있다
        // Object는 따로 extends를 붙여주지 않아도 자동으로 상속한다
     

          cc.Child_func();
        // 위의 코드는 자식 객체에 선언된 메소드를 호출한다.

 

 


***  이 경우는 접근이 안됨
:  부모가 자식 객체에 접근하는 경우

SuperClass sc = new SuperClass();
// sc.Child_func();
// 위의 코드는 사용이 불가능 하다








}
}