반응형
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 |