JAVA

[JAVA] final 키워드 | 인터페이스(interface)

멍정 2023. 9. 15. 16:23

멍하

다시 돌아온 자바공부 5일차 version 2

자바 빨리 끝내고 싶어요

 

19강 final 키워드

https://youtu.be/HqwpYlRCKxk?si=wv67CkbzaFK5MD65

그게 뭘까?

final : 절대 변하지 않는 것 (변수, 메소드, 클래스 etc..)

- 변하지 않는 변수 = 상수

- 재정의가 불가능한 메소드

- 상속이 불가능한 클래스

 

변수

//main.java
public class Main {
	public static void main(String[] args) {
		
		final int number = 10; //변수 값을 바꿀 수 없음
		System.out.println(number);
	}
}

메소드

parent 클래스의 show에서 hi를 출력

//parent.java
public class Parent {
	public void show() {
		System.out.println("hi");
	}
}

main class에서 show 메소드를 재선언해줬기 때문에 hello를 출력함

//main.java
public class Main extends Parent {
	
	public void show() {
		System.out.println("hello");
	}
	
	public static void main(String[] args) {

		Main main = new Main();
		main.show();
	}
}

but final을 붙이면 main class에서 show를 재정의할 수 없음

public final void show()

//parent.java
public class Parent {
	public final void show() {
		System.out.println("hi");
	}

}

final class는 상속받을 수 없음

final class Parent { } //다른 class에서 상속 불가


20강 인터페이스

https://youtu.be/XkSWgIQ2zkk?si=xlhyYiX2BxzEXeT9

인터페이스

다중상속이 가능함

정의된 메소드와 상수만을 가질 수 있음

?? 설계에 필요한 것만 만들 수 있음?

 

추상메소드는 하나의 클래스만 상속받을 수 있지만 인터페이스는 다중 상속이 가능하다.

implements를 통해 상속 받을 수 있다.

public class Main implements class1, class2

//main.java
public class Main implements Dog, Cat{

	public static void main(String[] args) {

		Main main = new Main();
		main.crying();
		main.one();
		main.two();
		
	}

	@Override
	public void crying() {
		// TODO Auto-generated method stub
		System.out.println("멍멍");
	}

	@Override
	public void one() {
		// TODO Auto-generated method stub
		System.out.println("one!");
	}

	@Override
	public void two() {
		// TODO Auto-generated method stub
		System.out.println("two!");

	}
}

interface를 통해 인터페이스 클래스를 선언할 수 있다.

public interface className

더욱 추상적인 형태이기 때문에 { }도 사용할 수 없다.

//Dog.java
public interface Dog{
	abstract void crying();
	public void one(); //{}를 사용하여 값을 넣을 수 없음
	
}

2개의 클래스를 한 번에 상속받을 수 있음을 테스트하기 위한 cat class

//Cat.java
public interface Cat {
	abstract void crying();
	public void two();	
}

큰 그림은 추상클래스와 비슷하지만 더욱 심플하게 생성해야한다는 점, 다중상속이 가능하다는 점이 인터페이스의 특징일까?