ประเภทของคลาสใน Java
Concrete class
คลาสปกติที่ไม่มี abstract method ใดๆ หรือคลาสที่มี implementation ของทุกเมธอดของ parent class หรือ interface และเมธอดของตัวเอง เรียกว่า concrete class
ตัวอย่าง
public class Concrete {
static int product(int a, int b) {
return a * b;
}
public static void main(String args[]) {
int p = product(2, 3);
System.out.println("Product: " + p);
}
}
ผลลัพธ์
Product: 6
Abstract class
คลาสที่ประกาศด้วย abstract keyword และมี abstract methods ศูนย์หรือมากกว่า เรียกว่า abstract class Abstract classes เป็น incomplete classes ดังนั้นเพื่อใช้งาน เราต้อง extend abstract class ไปยัง concrete class อย่างเคร่งครัด
ตัวอย่าง
abstract class Animal {
public abstract void sound();
}
public class Dog extends Animal {
public void sound() {
System.out.println("Woof");
}
public static void main(String args[]) {
Animal a = new Dog();
a.sound();
}
}
ผลลัพธ์
Woof
Final class
คลาสที่ประกาศด้วย final keyword เป็น final class และ ไม่สามารถ extend ได้โดยคลาสอื่น ตัวอย่างเช่น java.lang.System class
ตัวอย่าง
final class BaseClass {
void Display() {
System.out.print("This is Display() method of BaseClass.");
}
}
class DerivedClass extends BaseClass {
// Compile-time error - can't inherit final class
void Display() {
System.out.print("This is Display() method of DerivedClass.");
}
}
public class FinalClassDemo {
public static void main(String[] arg) {
DerivedClass d = new DerivedClass();
d.Display();
}
}
ในตัวอย่างข้างต้น DerivedClass extends BaseClass(final) เราไม่สามารถ extend final class ได้ ดังนั้น คอมไพเลอร์จะโยน error โปรแกรมข้างต้น ไม่ execute
ผลลัพธ์
cannot inherit from final BaseClass Compile-time error - can't inherit final class
POJO class
คลาสที่มีแค่ private variables และ setter/getter methods เพื่อใช้ตัวแปรเหล่านั้น เรียกว่า POJO (Plain Old Java Object) class เป็น fully encapsulated class
ตัวอย่าง
class POJO {
private int value=100;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
public class Test {
public static void main(String args[]){
POJO p = new POJO();
System.out.println(p.getValue());
}
}
ผลลัพธ์
100
Static class
Static classes คือ nested classes กล่าวคือ คลาสที่ประกาศภายในอีกคลาสหนึ่งเป็น static member เรียกว่า static class
ตัวอย่าง
import java.util.Scanner;
class staticclasses {
static int s; // static variable
static void met(int a, int b) { // static method
System.out.println("static method to calculate sum");
s = a + b;
System.out.println(a + "+" + b); // print two numbers
}
static class MyNestedClass { // static class
static { // static block
System.out.println("static block inside a static class");
}
public void disp() {
int c, d;
Scanner sc = new Scanner(System.in);
System.out.println("Enter two values");
c = sc.nextInt();
d = sc.nextInt();
met(c, d); // calling static method
System.out.println("Sum of two numbers-" + s); // print the result in static variable
}
}
}
public class Test {
public static void main(String args[]) {
staticclasses.MyNestedClass mnc = new staticclasses.MyNestedClass(); // object for static class
mnc.disp(); // accessing methods inside a static class
}
}
ผลลัพธ์
static block inside a static class Enter two values 10 20 static method to calculate sum 10+20 Sum of two numbers-30
Inner Class
คลาสที่ประกาศภายในอีกคลาสหรือเมธอด เรียกว่า inner class
ตัวอย่าง
public class OuterClass {
public static void main(String[] args) {
System.out.println("Outer");
}
class InnerClass {
public void inner_print() {
System.out.println("Inner");
}
}
}
ผลลัพธ์
Outer