유디의 공간정보·개발일기

H5-7. 0723_ Interface, abstract, Constructor(생성자) 본문

JDBC

H5-7. 0723_ Interface, abstract, Constructor(생성자)

55yudi 2021. 10. 31. 16:25

[InterfaceTest]

package myjdbc;

public class InterfaceTest {

	public static void main(String[] args) {
//		Shape shape = new Shape(); //얘는 추상클래스라서 객체생성(객체화)이 안되는데
		Shape tri = new Triangle();//얘는 Shape과 Triangle이 상이한 타입을 갖기 때문에 가능, 바꿔서는 안되고
//		tri.x = 0; //x : 상속이 됐기 때문에 Triangle 클래스도 갖고 있는 변수
		tri.getArea(); //호출 가능 //Triangle 클래스에서 실행되는 것임!!!
		//인터페이스에서 실행되는 것처럼 보이지만 아니다. 클래스에서 실행되는 것 
		MyInterface my = new MyInterfaceImpl();
		my.write(); //write()는 MyInterface에 "선언"돼 있고, MyInterfaceImpl 클래스에 "정의"돼 있다.
					//MyInterfaceImpl 이 클래스에서 실행되는 것임!!!
	}

}

 

인터페이스

- 인터페이스 : 일종의 클래스

- 추상클래스와 비슷하나(:타입으로 쓰일 수 있다) 다르다.
- 인터페이스도 .class로 컴파일 된다.
- 하위클래스로 쓸 때 implements를 하고, overriding하여 사용하도록 함
- 인터페이스에서는 메서드에 바디가 없다.
- 상속받을 부모 클래스 내 추상메서드를 구현해야 하는 의무를 가진다.

- 인터페이스의 하위클래스로 사용 시 implements 사용

interface MyInterface {
//	public void print() { //인터페이스 안에서 객체 생성이 안됨
//	}
	public abstract void print(); //이렇게 써야 함
	void write(); //public abstract이 자동으로 적용된다.(위에 있으니 없어도 됨)
	
}

class MyInterfaceImpl implements MyInterface { //오류 이유 : MyInterface에 "선언"된 것이 여기에 정의돼야 한다?

	@Override
	public void print() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void write() {
		// TODO Auto-generated method stub
		
	}
	
}

 

추상메서드, 추상클래스

- 추상메서드 : abstract (extends와 interface의 혼합)

- 추상클래스 : abstract class

- 추상클래스는 객체화가 될 수 없다.

abstract class Shape { //도형 //<--여기도 추상클래스로 표시
	int x, y; //"멤버변수"를 만들어 줌 (로컬변수 아니야)
	//abstract : "추상메서드"라 하며, '메서드를 선언했다' 고 말함
	//메서드는 호출/실행, 정의, 선언이라는 것을 알아야 함
	abstract double getArea(); ////바디가 없다고 말한다. {} : 이 구간을 "바디"라고 한다. --> 바디를 삭제함
	
	String info() { //{}바디가 있는건 "정의"한 것,  없는건 "선언"한 것 ({}안에 내용이 없더라도 {}가 있으면 있는것!)
		return "x = " + x + ", y = " + y;
	}
}

//Shape클래스로부터 "상속"을 받는 클래스 Triangle임   //x, y는 상속이 돼서 트라이앵글도 갖고 있는 변수가 됨
class Triangle extends Shape { // 삼각형 h*w/2
	
	@Override
	double getArea() { //getArea : 도형이라는 의미
		System.out.println("getArea()");
		return 0;
	}
}

class Rectagle extends Shape { //사각형 h(높이)*w(너비)
	double getArea() {
		return 0;
	}
}

- double : 자료형

- 상속 -> extends

 

- abstract class A { } : 추상클래스의 선언

  * 미완의 클래스 메서드를 선언해 두고 사용자가 overriding해서 사용할 수 있도록 선언해 놓은 것

  * 상속을 의무화하여 사용하게 함

  * abstract 메서드 내에는 { } 바디를 가질 수 없다.

 

  * @override : 다른 메서드에 있는 메서드를 자식 클래스에서 동일 이름으로 '재정의' 하는 것,

                    상속받은 멤버 중 특정 부분을 재정의하여 실행하도록 하는 기능 (우선순위 : 자식메서드 먼저0

 


 

- 정의 : { } (바디)가 있는 것

- 선언 : { } (바디)가 없는 것

 

- F4키 : 상위클래스를 보여줌

 


Constructor(생성자)

- 객체를 생성하는 것

- 상속을 받아 인스턴스를 생성하는 과정에서 생성자 메서드에 지정하여 초기화 작업을 할 수 있다.

 


자동 들여쓰기 단축키

ctrl + shift + f