TIL 03 - JAVA

eyan31·2022년 6월 14일
0

TIL

목록 보기
3/25
post-thumbnail

TIL | 06.14의 기록

오버로딩

같은 클래스내에서 같은 메소드명이 여러개 존재하는 것을 말한다.
메소드들끼리 매개변수의 갯수나 데이터형이 달라야한다.

public void sum() {실행문}
public void sum(int max) {실행문}
public void sum(int max, String msg) {실행문}
public void sum(String msg, int max) {실행문}

상속

클래스명 extends 상위클래스명 extends 키워드를 통해 상속받는다. (1개만 상속 가능함)
상속관계에서 생성자 메소드는 상위클래스의 생성자가 먼저 실행된다.
참고) 상속관계에서 상위클래스에 매개변수없는 생성자 메소드가 없으면 에러가 나게 된다. 필요 여부와 관계없이 꼭 넣어주기.
모든 클래스의 최상위 클래스는 object이다. 자동 상속되어있어 명시하지 않아도 된다.

super : 하위클래스의 생성자 메소드에서 상위클래스의 생성자 메소드를 호출한다, 반드시 첫번째 실행문으로 기술해야 한다.
상위클래스와 하위클래스에 같은 멤버변수가 존재할때 상위클래스의 멤버변수를 가리킨다.
this : 해당 하위클래스를 가리킨다. 그러나 하위클래스에 해당 변수가 없으면 상위클래스의 변수를 호출하게 된다.
오버라이딩 (override) : 상속관계에서 상위클래스에 있는 메소드를 하위클래스에서 재정의.
protected접근제한자는 다른 클래스에서 접근하려면 해당 클래스를 상속받아야 한다.
private접근제한자는 객체를 통한 접근이 불가능하다.(캡슐화), 상위클래스의 멤버변수, 메소드가 private이면 상속되지 않는다.

형변환 (Type Casting)

하위클래스는 상위클래스에 대입 가능하지만(자동 형변환), 상위클래스는 하위클래스에 대입 불가능하다.

Car - 상위클래스 truck - 하위클래스
Car c = new Car();
Truck t = new Truck();
Car cc = new Truck();
Truck tt = new Car() -> 불가능

하위클래스의 오버라이딩은 상위클래스로 형변환되어도 하위클래스의 메소드기능이 구현된다.(다형성)
그러나 하위클래스의 오버로딩은 구현되지 않는다.
하위클래스를 상위클래스로 형변환한것을 다시 하위클래스로 형변환하면 하위클래스의 오버로딩 메소드들도 구현 가능하다.

Truck ttt = (Truck)cc;

참고) 최상위 클래스인 object는 모든 클래스, 변수를 다 담을 수 있다.

추상클래스

추상클래스는 추상메소드를 한개 이상 포함한 경우를 말한다. 추상클래스는 classs왼쪽에 abstract키워드를 기술하여야 하고, 추상메소드는 반환형 왼쪽에 abstract키워드를 기술하여야 한다. 추상메소드는 반환형과 메소드명은 존재하나 실행부가 없는 메소드이다.
abstract int getData(); abstract void output();
추상클래스는 반드시 상속받아 추상메소드를 오버라이딩(메소드 재정의)하여 사용하여야 한다. 추상메소드는 공동작업시 메소드명을 통일시키기 위해 주로 사용된다.

인터페이스

인터페이스는 추상메소드들과 static final 변수들이 존재하는 클래스이다.
클래스가 인터페이스 클래스를 활용하기 위해서는 implements키워드로 인터페이스를 상속받는다. 인터페이스는 여러개를 상속받을 수 있다.

public class InterfaceMain implements InterfaceTest, InterfaceBoard

인터페이스에서 인터페이스를 상속받을 때는 extends키워드로 기술하며 1개만 상속 가능하다. 상속받은 모든 추상메소드는 오버라이딩 되어야 한다.

내부클래스

내부클래스는 클래스 내의 클래스를 말한다. 데이터를 공유하면서 단독적으로 클래스가 만들어져야할 때 사용된다.

내부클래스 생성 방법

  1. 클래스의 멤버영역에 내부클래스 만들기
public class OuterClass {
	int age = 30;
    public OuterClass() {}
    Public void output() {
    	System.out.println("나이="+age);
    }
    class InnerClass { //내부클래스
    	String addr = "마포구 서교동";
        InnerClass() [}
        	output();
       }
    }

내부클래스에서는 외부클래스의 멤버변수, 메소드를 사용할 수 있지만, 외부클래스에서 내부클래스의 멤버변수, 메소드의 사용이 불가능하다.

내부클래스를 사용하기 위해서는 외부클래스가 객체로 생성되어야 한다.

  • 객체생성방법 첫번째
OuterClass oc = new OuterClass();
OuterClass.InnerClass ic = oc.new InnerClass();

내부클래스 객체타입을 외부클래스.내부클래스로 해야한다.
내부클래스 객체에서 외부클래스의 변수, 메소드는 호출할 수 없다.

  • 객체생성방법 두번째
OuterClass.InnerClass ic2 = new OuterClass().new InnerClass();

외부클래스와 내부클래스 한번에 객체 생성하는 방법이다.
그러나 한번에 객체생성하면 외부클래스의 객체가 없으므로 외부클래스의 변수, 메소드를 호출할 수 없다.

  1. 메소드 내에 내부클래스 만들기
    매소드 내에 있는 내부클래스는 메소드가 호출되어야 실행된다.
    외부클래스와 메소드 내의 변수, 메소드를 사용할 수 있지만, 클래스가 정의된 이후의 값에는 접근할 수 없다.
public void start() {//메소드
	String tel = "010-1234-5678";
    class InnerTest {//내부클래스
    	int num = 100;
        String name = "세종대왕";
        InnerTest() {}
        void print() {
        	System.out.println(num+"->"+name);
        }
    }
  1. 익명의 내부클래스 만들기
    익명의 내부클래스는 메소드 내에 정의하며 메소드 내에서만 사용이 가능하다. 주로 한번만 사용하려는 상황에서 사용된다. (메소드를 재정의하여 일회성으로 사용할때..?)
public AnonymousInner() { //메소드
				여기서부터
    Student s = new student() {
    	public void StudentOutput() {
        	System.out.println("no="+no);
        }
    }; 여기까지 내부클래스
    s. StudentOutput();
}
profile
터벅터벅 개발자 지망생의 하루

0개의 댓글