본문 바로가기
Programming/Java, Spring

[Java 기초문법] object Superclass / Member Visibility / 클래스 계층구조 이해

by Renechoi 2022. 10. 17.

 

[Java 기초문법] by Professional Java Developer Career Starter: Java Foundations @ Udemy

 



superClass

 



Generate해서 toString() 함수를 만들어주었다. 

 

 

 

 

@Override
public String toString() {
    return "Person{" +
            "firstName='" + firstName + '\'' +
            ", lastName='" + lastName + '\'' +
            ", dob=" + dob +
            ", address=" + address +
            ", spouse=" + spouse +
            '}';
}

 

Pet 클래스가 있고 dog와 cat이 있으면

cat이 dog를 extends하여 가져옴으로써 method를 형성해줄 수 있다.

이것이 자바의 object가 가진 hierachy를 represent한다

 

 

 

 

Pet에 toString() 메소드가 있다면 cat도 그것을 상속받아서
그 기능을 똑같이 구현한다.

펫의 메소드

 

 

캣의 메소드

 

 

 

 

이때 캣의 내용을 특정하게 지정해주고 싶을때 나오는 개념이 override

 

@Override
public String toString(){
    return super.toString();        // 여기서 super란 현재의 파일보다 위에 존재하는 = extends하고 있는 pet
                                    //하지만 명시적으로 pet으로 써주면 안됨 = static 개념 때문에 
}

하드코딩을 예시로 들어보면

 

 

 

 

 

기존의 null 값이 아니라 여기서 입력한 값대로 출력한다

그런데 pet으로 가보자.

여기서도 똑같이 overri

de를 하고 있는데 이상한 점은 ?

 

 

 

pet은 extends를 하고 있지 않다는 것이다

 

 

 

 

 

 

이것은 explicitly 명시하고 있지 않는 것인데 사실은 암묵적으로 무언가를 extending하고 있음을 의미한다

그것은 object이고 따라서 사실은 아래와 equivalent하다

 

 

 

 

 

자바의 모든 클래스는 사실 이렇게 전부 object를 extend하고 있다

 

 

 

 


 

Class Member Visibility

 

 

public이라는 것은 class가 닿는 한에서 accessible하다

예를들어 클래스 A와 B를 각자의 패키지 안에 새로 만들었다고 보자.

클래스 B를 아래와 같이 만들어 놓고 A에서 호출한다

 

 

 

정상적으로 출력

 

 

 

PRIVATE를 만들어보자.

 

 

A로와서 Private를 호출하려고 하면 문젝발생한다.

 

 

즉, private를 classB에서 선언했으면 다른 패키지의 다른 클래스에서 접근할 수 없다.

같은 클래스에서 호출하려고 하면 다음과 같이 가능

 

 

 

 

재밌는 점은 ClassBd의 public에서 private메소드를 생성해주고

다시 ClassA에서 publci을 호출하면 같이 호출된다는 것이다

 

 

 

 

같은 패키지 안의 다른 클래스라면 접근이 가능할까?

 

 

 

 

불가능

 

 

 

Protected Method에 대해 알아보자.

 

 

A에서 접근 가능 ? 불가능

 

 

같은 패키지의 다른 클래스에서는 가능하다

 

packageProtected는 ?

 

다른 패키지 밖에서는 불가능

 

=> 다른 패키지에서 접근 가능한 것은 오로지 public뿐이다

 

하지만 같은 package라면 접근 가능

 

 

 

 

하지만 protectedMethod는 extend를 할경우 접근이 가능해진다

 

 

extend를 해도 접근 불가한 것이
packageprotected

 

같은 패키지인 경우라면 둘다 접근이 가능하다

 

 

 

 

 

field

 

 

field란 일반적으로 클래스 내의 variable를 지칭한다고 치자

 

class에서와 마찬가지로 private하게 설정한 것은 다른 클래스에서 접근할 수 없다

 

 

 

 

마찬가지로 protected도 가능

 

 

 

 

 

 

반응형