본문 바로가기

Java

[Java] abstract

반응형
package org.opentutorials.javatutorials.abstractclass;

abstract class A {
	
}

public class AbstractTest {

	public static void main(String[] args) {
		A obj = new A();
	}

}

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 

Cannot instantiate the type A

에러가 뜬다

 

메소드 중에 1개라도 abstract 메소드가 있으면 클래스도 abstract 클래스가 되어야 한다.

 

 

package org.opentutorials.javatutorials.abstractclass;

abstract class A {
	public abstract int b();
	
	//public abstract int c() {
		//안에 내용이 있는 메소드는 abstract 메소드가 될 수 없다.
	//}
	
	public void d() {
		//추상 메소드가 아닌 메소드 존재 가능하다.
		System.out.println("world");
	}
}

class B extends A {
	public int b() {
		System.out.println("test ");
		return 1;
	}
}

public class AbstractTest {

	public static void main(String[] args) {
		//A obj = new A();
		B obj = new B();
	}

}

 

package org.opentutorials.javatutorials.abstractclass.example;

abstract class Calculator {
	int left, right;
	
	public void setOprands(int left, int right) {
		this.left = left;
		this.right = right;
	}
	
	public abstract void sum();
	public abstract void avg();
	public void run() {
		sum();
		avg();
	}
}

class CalculatorPlus extends Calculator {
	public void sum() {
		System.out.println("+++ sum() +++ : " + (this.left + this.right));
	}
	
	public void avg() {
		System.out.println("+++ avg() +++ : " + (this.left + this.right) / 2);
	}
}

class CalculatorMinus extends Calculator {
	public void sum() {
		System.out.println("--- sum() --- : " + (this.left + this.right));
	}
	
	public void avg() {
		System.out.println("--- avg() --- : " + (this.left + this.right) / 2);
	}
}

public class CalculatorDemo {

	public static void main(String[] args) {
		CalculatorPlus c1 = new CalculatorPlus();
		c1.setOprands(10, 20);
		c1.run();
		
		CalculatorMinus c2 = new CalculatorMinus();
		c2.setOprands(10, 20);
		c2.run();

	}

}

 

출력값

+++ sum() +++ : 30
+++ avg() +++15
--- sum() ---30
--- avg() ---15
반응형

'Java' 카테고리의 다른 글

[Java] Interface  (0) 2021.03.14
[Java] final  (0) 2021.03.14
[Java] 클래스 접근 제어자  (0) 2021.03.14
[Java] 메서드 접근 제어자  (0) 2021.03.13
[Java] overloading 오버로딩  (0) 2021.03.11