JAVA(상속,접근제어자, 추상클래스,인터페이스)

allnight5·2022년 11월 14일
0

자바

목록 보기
2/12

상속

상속이란 기존의 클래스를 재상용하는 방식중의 하나로 한번 작성한 코드가 재사용이 필요하다면 변경사항만 코드로 작성하므로 상대적으로 적은양의 코드를 작성할 수 있게 됩니다.

  • 상속의 특징
    1. 부모 클래스로에서 정의된 필드와 메소드를 물려 받습니다.
    2. 새로운 필드와 메소드를 추가할 수 있습니다.
    3. 부모 클래스스에서 물려받은 메소드를 수정할 수 있습니다.

상속을 할 때 인텔리J에서는 다른 언어와 같이 내용만 써주면 되는 것이나 볼 때 앞에 이 변수명에 들어갔다고 보여주는 것 때문에 헷갈릴수 있으며 이것의 경우 파이썬은 변수명을 쓰고 내용을 쓴다면 그곳에 들어가니 자바와 파이썬을 같이 배울시 헷갈릴수 있다. 함수를 불러오는 것은 다른 언어와 비슷하다

1.메소드 overloading
아래와 같이 이름과 괄호 안에 들어가는 매개변수의 타입과 순서 개수이 모두 같다면 오류가 일어나게 된다

    int add (int x, int y, int z ){
        return x+y+z;
    }

    long add (int a, int b, int c){
        return a+b+c;
    } 

return 타입이 다를 경우 overloading으로 치지 않는다.
아래와 같이 변경되면 오류가 사라진다.

    long add (int a, int b){
        return a+b;
    }
    long add (int a, long  b){
        return a+b;
    }
  1. overriding
    부모클래스에 있는것과 override 한 함수의 경우
    자식클래스의 있는 것만을 실행하는데 이것을 명확하게 나타내기 위해서
    그 함수 위에 @Override라는 이름을 붙여준다. 아래와 같이 나타낸다
class Animal
    public void cry(){
        System.out.printf(name + "is cryking");
    }
class Dog extends Animal
@Override
    public void cry(){
        System.out.printf(name + "is barking");
    }

overloading은 기존에 없는 새로운 method를 정의하는데 같은 이름을 가지는 함수를 정의하는 것
overriding 부모에 있는 똑같은 함수를 자식이 구현해서 부모에 있는 함수를 없는체 하는 것이다.

접근제어자

public 다른 class에서도 접근이 가능하다
private 같은 class내에서만 접근이 가능하다
protected super호출 없이는 class내에서만 접근이 가능하다.

super 잊어버린 것 같으니 한번 더써줌
super. 부를 수 있는 모든 함수를 호출할 수 있다.

protected 그냥 호출시는 안되고 super붙여서 호출이 가능하다.

앞에 아무것도 선언하지 않는다면 패키지 private라고 자동선언된다
void 변수이름 -> (private)void 변수이름

자바는 패키지와 클래스를 포함한 이름을 이름으로 인식하게 된다.
내가 원하는 클래스가 어떤 패키지에 있는지 확인하고 import하는 것이 중요하다.

클래스 내부에 선언된 데이터에 부적절한 사용으로부터 보호해 주는 것이 이 접근 제어자의 역할이다
좀 더 전문화 하면 캡슐화라고 한다. 캡슐화가 가능할수 있도록 돕는 자바언어에 있는 하나의 도구이다.
객체지향 프로그래밍을 하는데 캡슐화가 중요하다. 캡슐화를 하는데 접근제어자가 필요하다.

추상 클래스

추상 method는 뭐냐면 설계만 되어있고 구현체가 없다
이것은 return type은 뭐고함수이름은 뭐고 파라미터는 뭘 받을지는 선언하지만
중 괄호 안에 있는 블록 구현체는 없다는 것이고
이것을 상속받는 자식클래스에서 모두 구현해야 된다는 것을 의미한다.
abstract이것이 추상클래스를 선언하는 구문이다.
abstract class Bird{
}
class는 { 중괄호를 가질수 있으나 class안에 있는
method(함수)는 중괄호를 가질수없이 선언만 가능하다.
abstract boolean Bird(int z);
상속 받을때는 extends를 쓴다

인터페이스

객체의 특정 행동의 특징을 정의하는 것이다
접근제어자 return type method 의 이름만 정의하고 abstract처럼 함수의 내용은 없다.
인터페이스를 구현하는 클래스를 인터페이스에 존재하는 상세 내용을 반드시 구현해야한다.
인터페이스는 상속받을때는 implements를 쓴다.
interface Flyable{
void fly(int x, int y, int z);
}

상속시 아래와 같이 새롭게 x,y,z에 대하여 선언을 해줘야한다.

class Pigeon implements Flyable{
##변수 선언
    private int x,y,z;

    @Override
    public void fly(int x, int y, int z) {
        printLocation();
        System.out.println("날아갑니다.");
        this.x = x;
        this.y = y;
        this.z = z;
        printLocation();
    }
    public void printLocation(){
        System.out.println("현재위치 (" +x +", " +y+", "+z+")");
    }
}

interface(인터페이스)는 구현하는 객체의 동작의 명세 다중상속이 가능하며 implements 통하여 상속하며 method 시그니처만 선언이 가능하다
abstract 일반 클래스와 똑같지만 객체를 그자체로 생성할 수 없으며 일반 class와 같이 extend 로 상속하며 다중 상속이 불가능하다. 추상 method에 대해서는 자식 클래스에서 무조건 구현해야 한다.
실체 객체가 두 개일때 어떤 종류의 타입으로 그것인 체해서 사용하겠다라는 것을 케스팅이라고한다.

    for(Person person: persons){
        if (person instanceof Walkable){
	#((케스팅 부분)person)
            ((Walkable)person).walk(1,1);
            System.out.println("---------------");
        }
profile
공부기록하기

0개의 댓글