java/객체지향

추상 클래스

june__Park 2021. 3. 25. 00:28
package test;

//상속 
// 부모 클래스 --> 만드는 이유 : 여러가지 클래스를 만들때 중복되는 기능들과 변수를 따로 빼서 
// 클래스를 좀더 단순하고 전문적으로 설계하기 위해서 
//상속 3가지 
// 일반 클래스를 상속받는다 : 부모클래스도 객체 생성가능 자식클래스도 객체생성 가능 
// 추상 클래스를 상속받는다 : 부모클래스는 객체 생성 불가능 , 자식만 생성가능 
// 인터페이스를 상속받는다 : 부모클래스는 단 한개밖에 없다 .. 그래서 나온게 인터페이스다 : 여러개 상속을 하기위해서 
// 인터페이스는 클래스가 아니다 --> 인터페이스는 객체를 만들 수가 없다 
// 추상클래스보다 더 추상적인 애 : 무조건 모든 메서드가 다 추상메서드 , 변수는 상수만 가능하다 
// 다 추상메서드이기때문에 인터페이스를 상속받으면 다 강제로 메서드를 구현해야함 --> 진짜 설계도면 
// 추상 -> 애매모호 : 미완성된 클래스 : 객체를 만들 수 없음 
// 모형 동그라미 , 세모 , 네모 , 다아이몬드 .. 
// 선의 갯수 , 점의 갯수 , --> 모양들이 가지고 있는 공통된 특성 
//인터페이스 는 추상클래스보다 더 추상적인 클래스 
// 실제로 구현된게 한개도 없다 , 어떤거를 구현해야할지 지시만 한것 
// 상수와 추상 메서드만 가질 수 있다 
// 다중 상속을 위해서 만들어 진것 
// 변수 - 변할 수 있는 수 , 상수는 변할 수 없는 수 : final 키워드 붙여주면 된다, 초기값 설정후 값 변경 불가능 
interface view {
	void setColor(String color);

	int setLineSize(int lineSize);

	int size = 100; // 자동으로 앞에 final를 붙이기 때문에 안보이는것 ㅍ
}

interface location {
	int setX(int x);

	int setY(int y);
}

class SetView {
	String color;
	String thikness;
}

abstract class Shape {
	// final int line = 100; // final이 붙여서 상수가 됨
	int line;
	int point;
	double area;

	// 추상 메서드는 구현부가 빠져있다 .. {영역}
	abstract void getArea();

	void myShape() {
		if (line == 100) {
			System.out.println("나는 동그라미야");
		} else if (line == 3) {
			System.out.println("나는 세모야 ");
		} else if (line == 4) {
			System.out.println("나는 네모야 ");
		}
	}
}

class Cricle extends Shape implements view, location {
	int round;

	Cricle(int round) {
		super.line = 100;
		super.point = 100;
		this.round = round;
	}

	@Override
	void getArea() {
		area = round / 2 * 3.14;
		System.out.printf("원의 넓이 = %.2f \n", area);
	}

	@Override
	public void setColor(String color) {
		System.out.println(color + "색이다");
	}

	@Override
	public int setLineSize(int lineSize) {
		System.out.println("선 굵기 : " + lineSize);
		return lineSize;
	}

	@Override
	public int setX(int x) {
		return x;
	}

	@Override
	public int setY(int y) {
		return y;
	}
}

class Triangle extends Shape {
	int garo;
	int sero;

	Triangle(int garo, int sero) {
		point = 3;
		line = 3;
		this.garo = garo;
		this.sero = sero;
	}

	@Override
	void getArea() {
		area = (garo * sero) / 2;
		System.out.println("세모의 넓이 = " + area);
	}
}

class Rectangle extends Shape {
	int garo;
	int sero;

	Rectangle(int garo, int sero) {
		point = 4;
		line = 4;
		this.garo = garo;
		this.sero = sero;
	}

	@Override
	void getArea() {
		area = garo * sero;
		System.out.println("네모의 넓이 = " + area);
	}
}

public class AbstractClass {
	public static void main(String[] args) {
		// Shape s1 = new Shape(); 미완성된 메서드(= 추상매서드 )가 있기때문에 객체 생성이 불가능하다
		Cricle c1 = new Cricle(10);
		c1.getArea(); // 부모클래스 안에 있는 미완성된 메서드를 자식이 오버라이드 해서 완성시킴
		c1.myShape(); // 부모클래스에 있는 완성된 메서드를 호출
		Triangle t1 = new Triangle(10, 5);
		t1.getArea();
		t1.myShape();
		Rectangle r1 = new Rectangle(20, 10);
		r1.getArea();
		r1.myShape();
	}
}