유디의 공간정보·개발일기
H5-7. 0723_ Interface, abstract, Constructor(생성자) 본문
[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
'JDBC' 카테고리의 다른 글
H5-6. 0723_ ArrayList (Collection API) (0) | 2021.10.31 |
---|---|
H5-5. 0723_ Prepared Statement로 질의하기, JDBC Test(계속) (0) | 2021.10.31 |
H5-4. 0723_ JDBC Test (0) | 2021.10.31 |
H5-3. 0723_ JDBC 10번 과제코드 (0) | 2021.10.31 |
H5-2. 0723_ 9번 과제코드, 문자열 거꾸로 출력하기 (0) | 2021.10.31 |