CodeGym /จาวาบล็อก /สุ่ม /วิธีการนามธรรม Java และคลาส
John Squirrels
ระดับ
San Francisco

วิธีการนามธรรม Java และคลาส

เผยแพร่ในกลุ่ม
วิธีการนามธรรมเป็นเครื่องมือที่มีประสิทธิภาพของ Java และทำให้ภาษาเชิงวัตถุนี้มีความสามารถมากยิ่งขึ้นเมื่อพูดถึงความหลากหลาย สามารถใช้ Java abstract method เพื่อสร้าง framework พื้นฐานสำหรับทั้งโปรแกรม และทำให้คุณปรับเปลี่ยนได้ตามต้องการJava Abstract Method และคุณ - 1

วิธีการนามธรรมคืออะไร?

วิธีการนามธรรมเป็นวิธีที่ไม่มีการนำไปใช้ นั่นคือ มีเพียงแค่การประกาศ ดังนั้นคุณจึงทราบชื่อ ประเภทการส่งคืน และตัวแปรที่จะยอมรับ นี่คือตัวอย่างของวิธีการนามธรรมขั้นพื้นฐาน:

public abstract int example(int a1, int a2);
เมื่อคุณดูเมธอดนี้ คุณสามารถบอกได้ว่าเมธอดส่งคืนจำนวนเต็มและยอมรับจำนวนเต็มสองตัวเป็นอาร์กิวเมนต์ สิ่งที่คุณไม่สามารถบอกได้คือวิธีการใช้งานวิธีนี้ นั่นเป็นเพราะว่าในการนำไปใช้ คุณต้องลบล้างมัน เมื่อสร้างวิธีการแบบนามธรรมใน java คุณต้องปฏิบัติตามหลักเกณฑ์บางประการ มิฉะนั้นโปรแกรมของคุณจะคอมไพล์ไม่ถูกต้อง จดจำ:
  • วิธีการนามธรรมของ Java ไม่มีการนำไปใช้ นั่นคือไม่ควรตามด้วยวงเล็บปีกกาและเนื้อหาที่บอกว่าควรใช้วิธีการนี้อย่างไร มันจบลงด้วยเครื่องหมายอัฒภาค

  • หากคุณสร้างวิธีการนามธรรม ที่สามารถใส่ในคลาสนามธรรมเท่านั้น นั่นคือคุณไม่สามารถมีคลาสคอนกรีตที่มีวิธีการนามธรรมอยู่ภายในได้
    ฉัน. หมายเหตุด้านข้าง หากคุณมีคลาสนามธรรม คลาสดังกล่าวสามารถมีตัวสร้างได้ ไม่จำเป็นต้องมีวิธีนามธรรมอย่างไรก็ตาม

  • เมื่อคลาสรูปธรรมขยายคลาสนามธรรม มันต้องใช้เมธอดนามธรรมทั้งหมดของคลาสพาเรนต์ด้วย มิฉะนั้นจะไม่เป็นรูปธรรมและต้องประกาศเป็นนามธรรม

สองคนสุดท้ายอาจทำให้สับสนเล็กน้อย ดังนั้นเรามาเคลียร์กันทันที

ขยายคลาส Java นามธรรม

สมมติว่าเราต้องการเขียนโปรแกรมเกี่ยวกับรูปร่างพื้นฐานที่จะส่งคืนเส้นรอบรูปและพื้นที่ ดังนั้นเราจึงสร้างคลาสนามธรรมหลัก แต่เนื่องจากทุก Shape มีกฎของตัวเอง แต่ละอันจึงต้องคำนวณไม่เหมือนกัน เราจึงเขียนคลาสShape แบบนามธรรม ดังนี้

abstract class Shape {
  		String shapeName = " ";
  		Shape(String name) { 
    			this.shapeName = name; 
  		} 

abstract double area();
  		abstract double perimeter();
}
ตอนนี้ หากเราต้องการใช้เมธอดนามธรรมเหล่านี้ เราต้องขยายShape คลาสพาเรนต์ Java แบบนามธรรม จากนั้นสร้างอินสแตนซ์เมธอด ดังนั้นแต่ละชั้นคอนกรีตจะต้องใช้วิธีนามธรรมพื้นที่และเส้นรอบวง

class Quadrilateral extends Shape  
{ 
    double length, width; 
      
    Quadrilateral(double l, double w, String name) 
    { 
        super(name); 
        this.length = l; 
        this.width = w; 
    } 
      
    @Override
    public double perimeter()  
    { 
        return ((2*length)+(2*width));
    } 
      
    @Override
    public double area()  
    { 
        return (length*width); 
    } 
}

Implementing the Quadrilateral class would then look like this
class Main
{ 
    public static void main (String[] args)  
    { 
      
        // creating a Quadrilateral object using Shape as reference 
        Shape rectangle = new Quadrilateral(3,4, "Rectangle"); 
        System.out.println("Area of rectangle is " + rectangle.area()); 
        System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
  
    } 
} 
ผลลัพธ์จากคอนโซลจะมีลักษณะดังนี้:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
โปรดทราบว่าคลาสQuadrilateralไม่จำเป็นต้องสร้างอินสแตนซ์Shape (String name) Constructor จากคลาสพาเรนต์Shape นั่นเป็นเพราะมันไม่ใช่วิธีการนามธรรม อย่างไรก็ตาม หากคุณใช้เฉพาะพื้นที่หรือเส้นรอบวงในคลาส คลาสใหม่จะต้องเป็นนามธรรมเพราะไม่มีทั้งสองอย่าง คุณยังสามารถใช้วิธีการแบบนามธรรมในส่วนต่อประสาน

บทคัดย่อ Java Methods พร้อมส่วนต่อประสาน

มาดูกันอย่างรวดเร็วว่าอินเทอร์เฟซคืออะไรและแตกต่างจากคลาสนามธรรมอย่างไร ในอินเทอร์เฟซ ตัวแปรใดๆ ที่ประกาศในอินเทอร์เฟซจะเป็นแบบสาธารณะ แบบคงที่ และแบบสุดท้าย ในทางกลับกันคลาสนามธรรมจะมีตัวแปรที่ไม่ใช่ตัวสุดท้ายเท่านั้น ทุกอย่างในอินเทอร์เฟซเป็นแบบสาธารณะตามค่าเริ่มต้น คลาสนามธรรมสามารถมีส่วนตัว ป้องกัน สาธารณะ ฯลฯ สุดท้าย คลาสไม่ขยายส่วนต่อประสาน แต่จะนำไปใช้ ก่อนหน้า JDK 8 อินเทอร์เฟซไม่สามารถมีสิ่งใดในนั้นได้นอกจากวิธีการนามธรรม ตอนนี้ อินเทอร์เฟซสามารถมีเมธอดเริ่มต้นและสแตติกได้ ด้วยเหตุนี้ แนวทางปฏิบัติที่ดีที่สุดจึงเปลี่ยนจากการใช้วิธีนามธรรมเป็นเทมเพลตที่ขยายได้ และเน้นที่ส่วนต่อประสานและการนำไปใช้ ดังนั้น หากคุณจะสร้างShapeเป็นส่วนต่อประสาน แล้วใช้งานเป็นรูปสี่เหลี่ยมมันจะมีลักษณะอย่างไร? ขั้นแรกคุณจะต้องกำจัดตัวสร้างShape (ชื่อสตริง) มันจะมีลักษณะเช่นนี้โดยใช้วิธีนามธรรมเพียงสองวิธี:

interface Shape {

  abstract double area();
  abstract double perimeter();
}


So the Quadrilateral class would then look like this:
class Quadrilateral implements Shape {  

  double length, width; 
      
    	  Quadrilateral(double l, double w) {
    
    	    this.length = l; 
    	    this.width = w; 
    	  } 
      
    	  @Override
    	  public double perimeter() {
     
    	    return ((2*length)+(2*width));
    	  } 
      
    	  @Override
    	  public double area() {
    
   	    return (length*width); 
    	  } 
}
สุดท้าย การใช้ Quadrilateral ใหม่ในขณะที่ใช้ อินเทอร์เฟ ซ Shapeจะเหมือนกันมาก:

class Main
{ 
    public static void main (String[] args)  
    { 
      
        // creating a Quadrilateral object using Shape as reference 
        Shape rectangle = new Quadrilateral(3,4); 
        System.out.println("Area of rectangle is " + rectangle.area()); 
        System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
  
    } 
}
และคอนโซลที่พิมพ์ออกมาจะมีลักษณะดังนี้:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
หากคุณต้องการสำรวจเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างอินเทอร์เฟซและคลาสนามธรรม คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่นี่

แต่ทำไมต้องใช้วิธี Java แบบนามธรรม?

มีสาเหตุหลายประการที่ใช้วิธีนามธรรมใน Java และเหตุใดคุณจึงควรคุ้นเคยกับการใช้ ต่อไปนี้เป็นเหตุผลสั้นๆ 3 ประการว่าทำไมคุณควรใช้เมื่อเหมาะสม
  1. หลีกเลี่ยงการพยายามซ้ำซ้อน – ย้อนกลับไปดูตัวอย่างการเขียนโค้ดของเรา ลองนึกภาพว่าคุณและทีมของคุณต้องสร้างคลาสสำหรับรูปร่างอื่นที่ไม่ใช่สี่เหลี่ยมผืนผ้า มีกี่วิธีที่คุณสามารถออกแบบคลาสนั้นได้? สิบ? สิบห้า? และนั่นเป็นปัญหาง่ายๆ จินตนาการถึงสิ่งที่ซับซ้อนกว่านี้มาก คุณและทีมของคุณคิดได้ร้อยวิธี จากนั้นคุณจะต้องเจอกับงานที่น่ากลัวในการสานมันเข้าด้วยกันเป็นโปรแกรมที่สอดคล้องกัน สิ่งนี้นำเราไปสู่จุดต่อไป: การกำหนดการใช้งาน

  2. วิธีการแบบนามธรรมใน Java อนุญาตให้มีคำจำกัดความของการใช้และการนำไปใช้ – เมื่อคุณใช้คลาสนามธรรมหรือส่วนต่อประสาน และโดยการออกแบบ วิธีการแบบนามธรรม คุณกำลังกำหนดวิธีที่คนอื่นจะโต้ตอบกับส่วนต่อประสานของคุณ นั่นทำให้พวกเขารู้ว่าควรใช้ตัวแปรใดและประเภทผลตอบแทนใดที่คาดหวังได้
    ในขณะที่พวกเขาสามารถแทนที่พวกเขาและสร้างคลาสที่เป็นรูปธรรมซึ่งใช้อินเทอร์เฟซของคุณในรูปแบบที่ไม่เหมือนใคร แต่คุณยังคงกำหนดหลักการใช้งานหลักสำหรับโค้ดของคุณ หากมีคนต้องการใช้ Shape พวกเขาจะต้องแทนที่หรือใช้ทั้งเส้นรอบวงและพื้นที่

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

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION