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();
}
}