Interfaces

30 August 2016

ในบทนี้ คุณจะได้เรียนรู้เกียวกับ Interface ซึ่งเป็นสิ่งที่ใช้กำหนดเมธอดที่คลาสจะต้องมี และเราจะพูดถึงการสร้างและการนำไปใช้งานร่วมกับคลาสในภาษา Java

Interfaces คืออะไร

Interface นั้นคล้ายกับคลาส แต่ภายใน interface จะมีได้แค่ค่าคงที่ และการประกาศรูปแบบของเมธอดเท่านั้น โดยเมธอดที่กำหนดขึ้นจะไม่มีส่วนการทำงานหรือเป็นเมธอดว่างเปล่าที่มีแค่ส่วนหัวของมัน interface นั้นจะต้องนำไปใช้ร่วมกับคลาส กล่าวอีกนัยหนึ่ง Interfaces นั้นเป็นการอธิบายว่าคลาสจะต้องมีเมธอด และนำเมธอดเหล่านั้นไปกำหนดการงานในตอนสร้างคลาส การซึ่งเรียกว่า Implement interface

ตัวอย่างในการใช้ interface มักจะใช้กับว่าการกำหนดโครงสร้างเมธอดให้กับคลาส และ interface จะไม่สามารถนำไปสร้างออบเจ็คได้ ในการใช้งาน interface จะต้องนำไป implements กับคลาสเท่านั้น ดังนั้นถ้าไม่มีคลาส interface ไม่ก็สามารถทำงานได้ ดังนั้นคลาสหลายคลาสอาจจะมีการ implements จาก Interfaces เดียวกัน

การสร้าง Interfaces

นี่เป็นรูปแบบการประกาศ interfaces ในภาษา Java

interface InterfaceName {
    ...
}

ในการประกาศ interface นั้นจะใช้คำสั่ง interface ตามด้วยชื่อของมัน InterfaceName และภายในบล็อคคำสั่งของ interface จะประกอบไปด้วยค่าคงที่ และส่วนหัวของเมธอดเท่านั้น ต่อไปมาดูตัวอย่างการประกาศ interface ในภาษา Java

interface ICar {
    public void engineStart();
    public void changeGear(int newGear);
    public void turnLeft();
    public void turnRight();
}

จากตัวอย่างเราได้สร้าง interface ชื่อ ICar ขึ้นมา และเมธอด header ภายใน interface ซึ่งเป็นการบอกว่าคลาสที่นำ interface นี้ไปใช้งานจะต้องมีเมธอดเหล่านี้อยู่ ต่อไปเราจะนำไปสร้างคลาส

class Car implements ICar {

    int gear = 0;

    public void engineStart() {
        // start engine
    }
    public void changeGear(int newGear) {
        // assign new gear
    }
    public void turnLeft() {
        // turn car to left direction
    }
    public void turnRight() {
        // turn car to right direction
    }
}

ในตัวอย่างเราได้สร้างคลาส Car และใช้คำสั่ง implements ตามด้วยชื่อ interface ICar เพื่อนำมาใช้งานสำหรับคลาสนี้ ภายในคลาส ตอนนี้เราต้องกำหนดการทำงานในเมธอดทั้งหมด ที่เราได้กำหนดไว้ใน interface ที่นำมา Implements

Implements Multiple Interfaces

ในภาษา Java คุณสามารถนำหลาย interface มา implements ในการสร้างคลาสได้ นั่นหมายความว่าคุณต้องกำหนดการทำงานของเมธอดให้ครบทุกเมธอดที่กำหนดใน interface ด้วยเช่นกัน โดยคั่นด้วยเครื่องหมาย commas (,)

class CarName implements Ineterface1, Interface2, ... {
    ...
}

class CarName extends SuperClass implements Ineterface1, Interface2, ... {
    ...
}

คุณสามารถใช้คำสั่ง extends สำหรับการสืบทอดคลาสร่วมกับการ implements interface ได้เช่นกัน ต่อไปมาดูตัวอย่างในการ implement หลาย interface

interface IVolume{
    public void increaseVolume();
    public void decreaseVolume();
}

interface IChanel {
    public void nextChangel();
    public void previousChangel();
}

interface INetwork {
    public void connectNetwork();
    public void disconnectNetwork();
}

เราได้สร้างสาม interface ขึ้นมาซึ่งแต่ละอันนั้นหมายถึงระบบ และภายในระบบจะมีเมธอดที่จะทำงานอยู่ภายใน โดย interface แต่ละอันนั้นจะหมายถึงระบบเกี่ยวกับความดังเสียง ระบบเกี่ยวกับช่องสัญญาณ และระบบของเน็ตเวิร์ค

class Radio implements IVolume, IChanel {
    public void increaseVolume() {
        ...
    }

    public void decreaseVolume() {
        ...
    }

    public void nextChangel() {
        ...
    }

    public void previousChangel() {
        ...
    }  
}

class Computer implements IVolume, INetwork {
    public void increaseVolume() {
        ...
    }

    public void decreaseVolume() {
        ...
    }

    public void connectNetwork() {
        ...
    }

    public void disconnectNetwork() {
        ...
    }
}

และเราสร้างคลาส Radio ซึ่ง implement จาก interface IVolume และ IChanel เพราะว่าวิทยุนั้นมีระบบในการเพิ่มลดระดับเสียง และมีระบบเปลี่ยนช่องสถานี คุณจะต้องทำการ override ทุกเมธอดที่มาจาก interface

และคลาส Computer ซึ่งจะ implement จาก interfaces IVolume และ INetwork โดยคอมพิวเตอร์นั้นจะมีระบบเพิ่มลดระดับเสียงเช่นกัน แต่คอมพิวเตอร์จะมีระบบเน็คเวิร์คแทน

คุณจะเห็นว่าเราแค่เพียงประกาศประเภทของเมธอดไว้ใน interface การสร้าง interface เหมือนการวางแผนระบบ การกำหนดระบบและการงานของมันอย่างคร่าวๆ ว่ามีอะไรบ้าง ส่วนการนำมา implement คลาสเป็นการพัฒนาระบบที่ได้ออกแบบไว้ก่อนหน้า

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับ interface และได้ทราบประโยชน์ของมัน และการนำไปใช้กับคลาส ซึ่งเราจะต้อง override ทุกเมธอดที่มาจาก interface เสมอ

บทความนี้เป็นประโยชน์หรือไม่?Yes·No