추상 클래스

jinkyung·2021년 1월 13일
0

JAVA

목록 보기
14/29

Abstract Class

  • 추상 클래스는 객체 생성이 안된다.
  • 추상클래스는 상속을 강제한다 (추상 메소드를 안가짐에도 불구하고 추상클래스인 경우도 있다 = 상속해서 써라, 객체 찍지 마라)
  • 따라서 나 또한 추상클래스가 되든, 메소드를 오버라이딩을해서 기능 정리를 해주든 둘 중 하나를 해야한다.
package com.bit.day08;

//추상 클래스 - 추상 메소드를 0개 이상 갖는 클래스 = 추상 메소드를 갖지 않고도 추상클래스가 될 수 있다.
abstract class Lec09{
	int su=1234;

	void func01(){
		System.out.println("기능1");
	}
	abstract void func02();			//추상메소드 = 선언만 되어있는 메소드
}


public class Ex09 {
	public static void main(String[] args){
		Lec09 lec=new Lec09();	    //오류
	}	
}

anonymous 클래스란? >> 귀찮아서 만든 클래스..



  • 추상 클래스는 자체적으로 객체를 만들어서 호출하는데 목적이 있는 것이 아니다.
  • 자식 클래스의 변수(객체)를 담아서 관리하거나, 메서드에 부모의 자료형을 줄 수 있다.
package ex03.inheritance.abstract13;

public class ShapeMain {
	public static void main(String[] args) {
		Shape[] shapes = new Shape[] {
				new Rectangle("사각형", 10, 10),
				new Triangle("삼각형", 10, 10),
				new Circle("원", 10)
		};
		
		for (int i = 0; i < shapes.length; i++) {
			shapes[i].ShowName();
			System.out.println("넓이 : " + shapes[i].calcArea());
			System.out.println();
		}
	}
}

package ex03.inheritance.abstract13;

// 추상 클래스
public abstract class Shape {
	// 도형마다의 공통점
	private String name;
	
	public Shape(String name) {
		this.name = name;
	}
	public void ShowName() {
		System.out.println("도형이름 : " + name);
	}
	
	// 부모가 정해줄 수 없다
	public abstract float calcArea();
}

package ex03.inheritance.abstract13;

public class Rectangle extends Shape {
	
	float width, height;

	public Rectangle(String name, float width, float height) {
		super(name);
		this.width = width;
		this.height = height;
	}

	// 부모로부터 상속받은 추상 메서드를 구현해야 객체생성이 가능하다
	@Override
	public float calcArea() {
		return width*height;
	}

}
package ex03.inheritance.abstract13;

public class Triangle extends Shape {
	
	float width, height;

	public Triangle(String name, float width, float height) {
		super(name);
		this.width = width;
		this.height = height;
	}

	@Override
	public float calcArea() {
		return width*height/2;
	}

}

package ex03.inheritance.abstract13;

public class Circle extends Shape {
	
	float radius;

	public Circle(String name, float radius) {
		super(name);
		this.radius = radius;
	}

	@Override
	public float calcArea() {
		return radius*radius*3.14f;
	}

}

0개의 댓글

관련 채용 정보