11일차.....

rkdehdgur777·2021년 3월 18일
0

JAVA

목록 보기
9/13
post-thumbnail

추상 클래스

추상메소드를 포함하는 클래스이다.
객체를 생성할수는 없고 오로지 상속의 목적으로 만든다.
클래스명에 abstract를 붙여서 만든다.

추상 메소드

body(몸체)를 갖지 않는 메소드이다.
추상메소드는 자식클래스에서 반드시 오버라이딩 해야 한다.
메소드 앞에 abstract를 붙이고 body를 만들지 않는다.

abstract class Myclass{ //추상클래스
 public abstract void print(); //추상메소드
}

만드는 이유
자식클래스에서 공통으로 반드시 구현해야 할 기능의 메소드를 가져야 할 경우 추상메소드 만듬

예)


abstract class Shape{
	 private int x;
	 private int y;
	 public Shape(int x,  int y) {
		 this.x=x;
		 this.y=y;
	 }
	 public int getX() {
		 return x;
	 }
	 public int getY() {
		 return y;
	 }
	 public abstract void draw();
 }
 class Rect extends Shape{
	 public Rect(int x, int y) {
		 super(x, y);
	 }
	 public void draw() {
		 System.out.println("x"+getX()+"y"+getY()+"위치에 사각형을 그려요");
	 }
 }

public abstract void draw();는 부모 클래스와 자식클래스에서 공통으로 사용되기 때문에 추상클래스와 추상메소드로 만들어준다. 추상 클래스를 만들기 위해서는 absrtact를 메소드 앞에 붙이고 자식클래스에서는 absrtact를 붙이지 않는다.

final

변수앞에 final을 붙이는 경우-> 변수를 상수로 만든다.
예) final double PI = 3.14

메소드명 앞에 final을 붙이는 경우 -> 자식에서 오버라이딩 안된다.
클래스명 앞에 final을 붙이는 경우 -> 상속을 할 수 없다.

메소드 앞에 final을 붙이면 오버라이딩을 할 수 없으므로 에러가 난다.

interface(인터페이스)

자식클래스들이 가져야 할 기능들의 목록을 제시(뼈대, 기본틀)
상수와 추상메소드로 이루어진다.

형식)
interface 인터페이스명{
		상수
        	추상메소드();
            }

인터페이스는 객체를 생성할 수 없다.(자식객체는 참조 가능하다.)

사용이유

1. 텍스트자식클래스가 가져야 할 기능들의 뼈대를 제공
2. 클래스는 다중상속이 지원되지 않지만 인터페이스를 활용하여 다중상속을 지원한다.
3. 인터페이스를 적절히 사용함으로써 유지보수가 수월해진다.

interface Shape1 {
	double PI = 3.14; // 상수 => public Static final이 생략됨

	public abstract void draw();

	void paint(); // public abstract 생략해도됨
}

class Box1 implements Shape1 { // 인터페이스를 상속 받을때는 implements 사용
	public void draw() {
		System.out.println("사각형 그리기");
	}

	public void paint() {
		System.out.println("사각형 칠하기");
	}
}

class Circle implements Shape1 {
	public void draw() {
		System.out.println("타원그리기");
	}

	public void paint() {
		System.out.println("타원칠하기");
	}
}

첫줄 double PIPI가 대문자이므로 자바코드에 의해 상수가된다.
인터페이스는 다중상속을 지원 한다public abstract void draw();void paint(); 를 오버라이딩 한다. 다른클래스에서 인터페이스를 상속 받을때에는 implements를 사용해야한다.

interface Shape2{
	void draw();
	void paint();
}
interface Point{
	void setPoint (int x, int y);
}
interface Rect3 extends Shape2, Point{
	void resize();
}

또한 interface끼리 상속할때는 extends를 사용한다.

0개의 댓글