Chapter 6 Abstract Class and Interface

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โครงสร้างโปรแกรมภาษา JAVA
Advertisements

C# เบื้องต้น ก่อนการเขียนเกมด้วย XNA
Suphot Sawattiwong Function ใน C# Suphot Sawattiwong
Lab Part Nattee Niparnan
การจัดการความผิดพลาด
Object and classes.
05_3_Constructor.
การเขียนโปรแกรมภาษาจาวาตอนที่ ๓
ครั้งที่ 7 Composition.
หลักการเชิงวัตถุ อาจารย์ศิริพร ศักดิ์บุญญารัตน์
Selected Topics in IT (Java)
Network programming Asst. Prof. Dr. Choopan Rattanapoka
การสืบทอด (Inheritance)
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
บทที่ 3 Class and Object (1) การสร้างและการใช้งานคลาส
คลาสและวัตถุ (2) (Class & Object)
 เป็นเมธอดที่มีคุณลักษณะของ Polymorphism รูปแบบหนึ่ง โดยใช้ชื่อเมธอดเดียวกัน มากกว่า 1 เมธอด เพื่อทำงานในแบบเดียวกัน  คลาสลูกสามารถเขียนทับ เมธอดของคลาสแม่ได้
บทที่ 1 หลักการเขียนโปรแกรมเชิงวัตถุ
คลาสและวัตถุ (3) (Class & Object)
คลาสและวัตถุ (2) (Class & Object)
คลาสและวัตถุ (4) (Class & Object)
คลาสและวัตถุ (3) (Class & Object). w5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 24, 25 as5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 23 2.
คลาสและวัตถุ (4) (Class & Object)
บทที่ 4 Method (1).
การสืบทอดคุณสมบัติ (Inheritance)
Lecture 9 Class (คลาส) To do: Hand back assignments
Inheritance การสืบทอดคลาส
String Class มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
input from keyboard มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 15 มิถุนายน 2550 Structure Programming มหาวิทยาลัยเนชั่น.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 3 มิถุนายน 2550 Method of Class มหาวิทยาลัยเนชั่น.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 22 มิถุนายน 2550 ความผิดพลาดที่พบ บ่อย มหาวิทยาลัยเนชั่น.
บทที่ 8 อาร์เรย์.
บทที่ 6 เมธอด.
ทำงานกับ File และStream
JAVA PROGRAMMING PART IV.
Handling Exceptions & database
โครงสร้างควบคุมการทำงาน
โปรแกรมภาษาจาวาเบื้องต้น Basic Java Programming 3(2-2-5)
เมธอดคือหน้าที่การงานของวัตถุให้เรียกใช้
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Java Programming Language.
ความสัมพันธ์ระหว่างคลาส (Class Relationship)
Object Oriented Programming Handling Exceptions
Method of Class อ.สุพจน์ สิงหัษฐิต
สำนักวิชาเทคโนโลยีสารสนเทศและการสื่อสาร มหาวิทยาลัยนเรศวร พะเยา
การวิเคราะห์และออกแบบระบบเชิงวัตถุ (OOAD)
Lec03 :: หลักการเชิงออปเจ็ค (Object Oriented Concept)
Lec05 :: การสืบทอด (inheritance)
Object-Oriented Programming
Advanced Class Design in Java Java Packages Week #6 Jarungjit Parnjai
บทที่ 3 Class and Object (2).
บทที่ 2 การแสดงผลและรับข้อมูล
บทที่ 4 คำสั่งควบคุมแบบมีทางเลือก
Java Programming Java Structure and Datatype,Variable
สายอักขระ เขียนโปรแกรม Java เบื้องต้น.
Object Oriented Programming : OOP
การสืบทอด (inheritance)
chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส
TECH30201 Object-Oriented Programming
Inheritance และ Encapsulation.  การสร้างหรือพัฒนาคลาสใหม่จากคลาสเดิมที่ มีอยู่แล้ว  คลาสใหม่จะนำแอตทริบิวต์และเมธอดของ คลาสเดิมมาใช้  เป็นการถ่ายทอดคุณสมบัติจากคลาสหนึ่งสู่อีก.
Object-Oriented Programming
การจัดการกับความผิดปกติ
บทที่ 6 ตัวแปรชุดและ สตริง รายวิชา ง การเขียนโปรแกรมเชิง วัตถุ Reading: ใบความรู้ บทที่ 6.
เริ่มต้นเขียนโปรแกรมภาษาจา วา (Introduction to JAVA Programming)
บทที่ 3 การสืบทอด (Inheritance)
Object-Oriented Programming Paradigm
Abstract Class and Interface
Method and Encapsulation
Inheritance Chapter 07.
Class Inheritance and Interfaces.
ใบสำเนางานนำเสนอ:

Chapter 6 Abstract Class and Interface ความหมายของ Abstraction วัตถุประสงค์การสร้าง Abstract Class และ Interface การใช้งาน Abstract Class และ Interface การทำ multiple inheritance ข้อแตกต่างระหว่าง Abstract Class และ Interface

Abstract Class หมายถึงคลาสที่ประกาศนำหน้าด้วย abstract สามารถมีทั้ง abstract และ non-abstract methods (method ที่มีแต่โครงของ method body).

Abstraction in Java Abstraction เป็นซ่อนการรายละเอียดของคำสั่งใน method จะอนุญาตให้ผู้ใช้ทราบเพียงว่า method ทำอะไรได้เท่านั้น เช่นการส่ง sms เราเพียงแต่พิมพ์ข้อความและส่งเท่านั้น โดยไม่รู้ขบวนการภายในในการส่ง message เลย Abstraction จะมุ่งเน้นเฉพาะว่า วัตถุทำอะไรได้บ้าง โดยไม่รู้ว่าทำอย่างไร

การสร้าง Abstraction ในจาวา สามารถสร้างได้ 2 อย่างคือ Abstract class (ทำได้ตั้ง 0 to 100%) Interface (ทำได้สมบูรณ์แบบ 100%) ทั้ง 2 วิธีเราจะเรียนในบทนี้

Abstract class in Java ก็คือ class ใดๆที่ประกาศว่าเป็น abstract ในการนำไปใช้จำเป็นต้องทำการขยาย(extend)และเขียนคำสั่งเพิ่มใน method ให้ทำงานตามต้องการ ตัวอย่างการประกาศ abstract class A{}  

abstract method เป็น method ประกาศให้เป็น abstract ซึ่งจะต้องไม่มีการเขียนคำสั่งใดๆเลยใน method นั้น เช่น abstract void printStatus();

Example of abstract class that has abstract method abstract class Bike{     abstract void run();   }      class Honda4 extends Bike{   void run(){System.out.println("running safely..");}   public static void main(String args[]){    Bike obj = new Honda4();    obj.run();   Ountput :running safely..

ตัวอย่างการใช้งานงานจริง Abstract Class abstract class Shape{ abstract void draw(); } class Rectangle extends Shape{ void draw(){System.out.println("drawing rectangle");}

-ต่อ- class Circle1 extends Shape{ void draw(){System.out.println("drawing circle");}   }     class TestAbstraction1{   public static void main(String args[]){   Shape s=new Circle1(); s.draw();   Output : drawing circle

Another example of abstract class in java abstract class Bank{ abstract int getRateOfInterest(); } class SBI extends Bank{ int getRateOfInterest(){return 7;} } class PNB extends Bank{ int getRateOfInterest(){return 9;} class TestBank{ public static void main(String args[]){ Bank b=new SBI(); int interest=b.getRateOfInterest(); System.out.println("Rate of Interest is: "+interest+" %"); }} Output: Rate of Interest is: 7 %

Abstract class having constructor, data member, methods etc. //example of abstract class that have method body    abstract class Bike{      Bike(){System.out.println("bike is created");}      abstract void run();      void changeGear(){System.out.println("gear changed");}    }    class Honda extends Bike{    void run(){System.out.println("running safely..");}    class TestAbstraction2{    public static void main(String args[]){     Bike obj = new Honda();     obj.run();     obj.changeGear();   }   Output : bike is created running safely.. gear changed

กฎเกี่ยวกับ Abstract กฎ: ถ้ามี method ใดๆในคลาสที่ระบุเป็น abstract method เกิดขึ้น คลาสนั้นต้องระบุเป็น abstract ด้วย เช่น class Bike12{   abstract void run();   }   Output: compile time error กฎ : ถ้าเรา extend คลาสใดๆที่เป็น abstract class ที่มีabstract method เราต้องทำการ implement เมธอดนั้น มิฉะนั้นเราต้องให้คลาสที่ extend นี้เป็น class abstract ด้วย

Interface interface ในภาษา java จะถือว่าเป็นแม่แบบ(blueprint)การทำงาน ของ class จะมีสมาชิกที่เป็นเพียง static constants abstract methods เป็นกลไกในการสร้าง abstraction โดยแท้จริง. abstract methods จะประกาศแต่เพียงส่วนหัวเท่านั้นไม่ต้องระบุส่วนของ body สามารถสนับให้เกิด multiple inheritance สนับสนุนความสัมพันธ์แบบ IS-A relationship. ไม่สามารถสร้างวัตถุได้เหมือน abstract class.

เหตุผลที่ต้องใช้ interface เพื่อให้ได้ fully abstraction. ต้องการใช้พฤติกรรมต่างๆที่ผสมกันมาจากหลายที่ด้วยการทำ multiple inheritance. ทำให้เกิดการขึ้นต่อกันของคำสั่งน้อยที่สุด (loose coupling) เพื่อการแก้ไข เพิ่มเติมที่ไม่ส่งผลกระทบต่อกัน Note : java compiler จะเติมคีย์เวิร์ด public ม abstract หน้า interface method และเติมคีย์เวิร์ด public, static และ final หน้า data members ให้โดยอัตโนมัติ : หรือ Interface fields จะเป็น public, static และ final โดยอัตโนมัติ ส่วน methods จะเป็น public และ abstract โดยอัตโนมัติ

ความสัมพันธ์ระหว่าง classes และ interfaces class extends another class an interface extends another interface a class implements an interface.

Simple example of Java interface interface printable{   void print();   }      class A6 implements printable{   public void print(){System.out.println("Hello");}   public static void main(String args[]){   A6 obj = new A6();   obj.print();    }   Output:Hello

Multiple inheritance in Java by interface สามารถทำได้ 2 รูปแบบคือ class ต่อเติม(implements)method จากหลาย interfaces interface ขยาย(extends) method จากหลาย interfaces

interface Printable{   void print();   }      interface Showable{   void show();   class A7 implements Printable , Showable{   public void print(){System.out.println("Hello");}   public void show(){System.out.println("Welcome");}   public static void main(String args[]){   A7 obj = new A7();   obj.print();   obj.show();    }   Output:Hello Welcome

เหตุผลว่าทำไม class จึงทำ multiple inheritance ไม่ได้ เพราะ method ที่ถูก inherit จาก interface มาจะถูก implement ในตัวclass interface Printable{   void print();   }    interface Showable{   }   class testinterface1 implements Printable,Showable{   public void print(){System.out.println("Hello");}   public static void main(String args[]){   testinterface1 obj = new testinterface1();   obj.print();    }   Output: Hello

Interface inheritance interface Printable{   void print();   }   interface Showable extends Printable{   void show();   class Testinterface2 implements Showable{      public void print(){System.out.println("Hello");}   public void show(){System.out.println("Welcome");}   public static void main(String args[]){   Testinterface2 obj = new Testinterface2();   obj.print();   obj.show();    }   Output : Hello Welcome

marker or tagged interface interface ที่ไม่มีสมาชิกเลยเรียกว่า “marker” หรือ “tagged” interface. เช่น: Serializable, Cloneable, Remote ฯลฯ. ใช้เพื่อบอกให้ JVM ทำงานเพิ่มเติมที่สำคัญบางอย่าง เช่น การเขียน Serializable interface    public interface Serializable{   }  

การใช้ abstract class ขยาย Interface เราอาจใช้ abstract class ทำการ implement เพิ่มเติมให้กับ interfaceinterface A{   void a();   void b();   void c();   void d();   }      abstract class B implements A{   public void c(){System.out.println("I am C");}  

class M extends B{   public void a(){System.out.println("I am a");}   public void b(){System.out.println("I am b");}   public void d(){System.out.println("I am d");}   }   class Test5{   public static void main(String args[]){   A a=new M();   a.a();   a.b();   a.c();   a.d();   }}   Output:I am a I am b I am c I am d

การใช้ instanceof กับ interface interface Printable{}   class A implements Printable{   public void a(){System.out.println("a method");}   }   class B implements Printable{   public void b(){System.out.println("b method");}   }     class Call{   void invoke(Printable p){//upcasting   if(p  instanceof A){   A a=(A)p;//Downcasting    a.a();   if(p  instanceof B){   B b=(B)p;//Downcasting    b.b();   }  }  } //end of Call class     

-ต่อ- class Test4{ public static void main(String args[]){ Printable p=new B();   Call c=new Call();   c.invoke(p);   }   Output: b method

Difference between abstract class and interface

Example of abstract class and interface in Java // มี  4 methods   interface A{   void a(); //bydefault, public and abstract   void b();   void c();   void d();   }      abstract class B implements A{   public void c(){System.out.println("I am C");}  

class M extends B{ public void a(){System. out class M extends B{ public void a(){System.out.println("I am a");} public void b(){System.out.println("I am b");} public void d(){System.out.println("I am d");} } //Creating a test class that calls the methods of A interface class Test5{ public static void main(String args[]){ A a=new M(); a.a(); a.b(); a.c(); a.d(); }} Output: I am a I am b I am c I am d

Nested Interface interface printable{ void print();  interface MessagePrintable{      void msg();    }   }