추상클래스로 만드는 경우
1) 해당 클래스의 객체 생성을 막고자 하는 경우
2) 추상메소드를 1개 이상 포함할 경우
추상메소드는 하위클래스에서 모두 구현해야함.
일련의 하위클래스들을 위한 규약의 일부를 정의하기 위한 것 -> 다형성!
추상클래스로는 객체생성 할 수 없음
추상클래스 : 클래스임. 참조변수로는 사용가능.
모든멤버변수, 일반메소드+추상메소드
미완성 설계도. 단일상속
package test;
abstract class Animal /* extends Object */ { // 추상클래스
int age;
void eat () {
System.out.println("먹는다");
}
abstract void speak() ; // 추상메소드
}
class Puppy extends Animal{ // 추상 클래스를 상속 받았으로 추상메소드를 오버라이딩 해야한다
@Override
void speak() {
System.out.println("멍멍~");
}
}
class Cat extends Animal{ // 추상 클래스를 상속 받았으로 추상메소드를 오버라이딩 해야한다
@Override
void speak() {
System.out.println("야옹~");
}
}
public class Test4 {
public static void main(String[] args) {
// new Animal(); // 추상클래스로부터는 객체생성 안됨
Animal ani = new Puppy(); // 추상클래스로 객체생성은 안되지만, 참조변수로는 사용가능
ani.speak();
ani = new Cat();
ani.speak();
}
}
○ 예제소스
package test;
// 추상클래스 Shape
abstract class Shape {
// 추상클래스 void draw()
abstract void draw();
}
// 클래스 Circle 상속 Shape 메소드 오버라이딩 출력 "원을 그린다"
class Circle extends Shape {
@Override
void draw() {
// super.draw(); // 에러. 추상메소드는 호출안됨.
System.out.println("원을 그린다");
}
}
//클래스 Rectangle 상속 Shape 메소드 오버라이딩 출력 "사각형을 그린다"
class Rectangle extends Shape {
@Override
void draw() {
System.out.println("사각형을 그린다");
}
}
//클래스 Triangle 상속 Shape 메소드 오버라이딩 출력 "삼각형을 그린다"
class Triangle extends Shape {
@Override
void draw() {
System.out.println("삼각형을 그린다");
}
}
public class Test5 {
public static void main(String[] args) {
// 추상클래스 타입으로 업캐스팅 -> 다형성
Shape shape = new Circle();
shape.draw();
shape = new Rectangle();
shape.draw();
shape = new Triangle();
shape.draw();
}
}
'IT > Java' 카테고리의 다른 글
자바 데이터베이스 연동 (0) | 2018.07.22 |
---|---|
자바 인터페이스 interface (0) | 2018.07.21 |
자바 static, final (멤버변수, 메소드, 클래스) (0) | 2018.07.20 |
자바 static, 클래스변수, 인스턴스변수 사용 예제 (0) | 2018.07.20 |
자바 static, 클래스변수, 인스턴스변수 (0) | 2018.07.20 |