상속 

 

상속은 코드 중복을 제거하여 클래스를 간결한게 구현할 수 있게 한다.


상속의 장점

 

□ 클래스의 간결화 - 멤버의 중복 작성 불필요

클래스 관리 용이 - 클래스들의 계층적 분류

소프트웨어의 생산성 향상 - 클래스 재사용과 확장 용이


자바 상속의 특징

 

- 자바에서는 다중상속을 지원하지 않는다.

- 자바에서는 상속의 횟수에 제한을 두지 않는다.

- 자바에서 계층 구조의 최상위에 java.lang.Object 클래스가 있다.


자바 상속 선언 

 

자바에서는 부모 클래스를 슈퍼클래스 (super class), 상속받는 자식 클래스를 서브클래스(sub class)라고 부르며,

상속을 선언할 때 확장한다는 뜻을 가진 extends 키워드를 사용한다. 

 

   public class Person{  //슈퍼 클래스(부모 클래스)

      ....

  }

  public class Student extends Person{  //서브 클래스(자식 클래스)

     ....

  }

  public class StudentWorker extends Student{//StudentWorker 가 Student를 상속받으면 person 클래스의 멤버도 자동 상속받는다.

      ....

  }


슈퍼 클래스에 대한 접근 지정

 

슈퍼 클래스의  private멤버 - 다른 어떤 클래스에도 접근할 수 없다.  오직 현재 클래스의 멤버들 에게만 접근 허용한다.

슈퍼 클래스의 디폴트 멤버 - 패키지에 있는 모든 클래스가 접근 가능하다. 다른 패키지는 X

슈퍼 클래스의 public 멤버 - 같은 패키지에 있든 다른 패키지에 있든 모든 클래스에 접근 가능하다.

슈퍼 클래스의 protected 멤버 - 같은 패키지에 속한 모든 클래스들

                                       - 같은 패키지(private X)든 다른 패키지(private, 디폴트 X)든 상속받는 서브 클래스






'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] final  (1) 2018.08.20
[JAVA] String 타입  (8) 2018.08.20
[JAVA]this 레퍼런스  (2) 2018.08.17
[JAVA]접근 지정자를 알아보자!  (2) 2018.08.17
[JAVA] 객체 지향의 4가지 특징을 알아보자!  (10) 2018.08.16

this 레퍼런스

 

this

 this는 자바의 중요한 키워드로서 단어 뜻 그대로 객체 자신을 가리키는 레퍼런스이다.


this의 기초 개념

 현재 실행되고 있는 인스턴스의 특정 필드를 지정할 때 사용된다. 


public class Circle{

      

         int radius;

 

         public Circle(int r)

{

   this.radius = r;

}  //멤버 radius를 접근

 

         

public int getRadius()

{

   return radius;

} //return this. radius;와 동일

  } 


this의 필요성

   public Circle(int radius) { radius = radius;


 여기서 2개의 radius는 모두 매개변수 radius를 접근하기 때문에, 멤버 radius를 변경하지 못한다.

생성자나 메소드의 매개변수 이름을 의미 있는 이름으로 정해주다 보면 멤버변수 이름과 겹치게 된다.

이 때 멤버변수 자신을 구별할 목적으로 사용된다.

 

  public Circle (int radius) { this.radius = radius;

  public Circle getMe( ) { return this;}  //getMe()메소드는 객체 자신의 레퍼런스 리턴

 

this()

생성자가 중복되어 있을 때 또다른 생성자를 호출 하고자할 때 사용한다.

 

class Binu{

 

int age;

int tall;

 

Binu() {

this(3,40);

}

 

Binu(int age) {

this.age =age;

tall=0;

}

 

Binu(int age, int tall) {

this.age =age;

this.tall=tall;

}

}

 

 

 

this()사용 시 주의할 점

 

-this()는 반드시 생성자 코드에서만 호출할 수 있다.

-this()는 반드시 같은 클래스 내 다른 생성자를 호출할 때 사용된다.

-this()는 반드시 생성자의 첫번째 문장이 되어야 한다.


 


 

 



'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] final  (1) 2018.08.20
[JAVA] String 타입  (8) 2018.08.20
[JAVA]상속-부모클래스, 자식클래스  (5) 2018.08.18
[JAVA]접근 지정자를 알아보자!  (2) 2018.08.17
[JAVA] 객체 지향의 4가지 특징을 알아보자!  (10) 2018.08.16

자바의 4가지 접근 지정자 

 

접근 지정자(access specifier)는 클래스나 멤버들을 다른 클래스에서 접근해도 되는지의 여부를 선언하는 지시어이다.

 

 

클래스 접근 지정

다른 클래스에서 이 클래스를 활용할수 있는지 허용 여부를 지정하는 것으로 말한다.

 

 

public 클래스 

 

패키지에 상관없이 다른 어떤 클래스에게도 사용이 허용된다.


ex) public class World{ //public 클래스


...........


}


디폴트 클래스 (접근 지정자 생략)


같은 패키지 내의 클래스에게만 사용이 허용된다.


ex) class Local{ //디폴트 클래스


...........


}



멤버 접근 지정


<공개범위>

public > protected > default > private


public 멤버


패키지를 막론하고 모든 클래스들이 접근 가능하다


private 멤버 


클래스 내의 멤버들 에게만 접근이 허용된다.


protected 멤버


보호된 공개를 지시 하는것으로 2가지 유형의 클래스에만 접근을 허용한다.

- 같은 패키지의 모든 클래스에 접근이 허용된다.

- 다른 패키지에 있더라도 자식 클래스의 경우 접근이 허용된다


디폴트 멤버(default 또는 package-private)


접근 지정자가 생략된 멤버의 경우, 디폴트(default)멤버 라고 한다.

동일한 패키지 내에 있는 클래스들만 디폴트 멤버를 자유롭게 접근할 수 있다.









'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] final  (1) 2018.08.20
[JAVA] String 타입  (8) 2018.08.20
[JAVA]상속-부모클래스, 자식클래스  (5) 2018.08.18
[JAVA]this 레퍼런스  (2) 2018.08.17
[JAVA] 객체 지향의 4가지 특징을 알아보자!  (10) 2018.08.16

+ Recent posts