Board logo

標題: 介面 [打印本頁]

作者: tonyh    時間: 2015-6-13 15:16     標題: 介面

本帖最後由 tonyh 於 2015-6-27 14:39 編輯

介面(Interface)是一種特殊的類別,在宣告時不是使用class而是改用interface,但在編譯後也會產生.class檔。介面只有宣告而沒有實作,架構上與抽象類別有點類似,用法與限制卻大不相同。

在Java中,類別並不允許多重繼承,但允許實作多個介面,而在介面繼承時,也允許繼承多個父介面,我們利用這兩種機制來模擬多重繼承。

我們可以把介面想像成物件與外界溝通的橋樑,或物件欲扮演的角色。通常我們使用介面來描述不同類別的物件間,共通的行為或特性。譬如:有個介面叫父親,把這個介面套用在小貓、小鳥、還是人類身上,就能使該物件開始扮演父親的角色,執行照顧子女的任務。

關於介面的幾個重點歸納如下:

1. 介面中的成員變數必須利用關鍵字final宣告為常數,並指定初始值。
2. 介面中的成員方法必須宣告為抽象方法,不能有方法主體。
3. 由於編譯器會自動將介面中的成員變數宣告為public、static與final,因此是常數變數,同時關鍵字可以省略。
4. 由於編譯器會自動將介面中的成員方法宣告為public與abstract,因此是抽象方法,同時關鍵字可以省略。
5. 類別可繼承一個類別但可實作多個介面。
6. 介面不能實作另一個介面但可繼承多個介面。
7. 類別可以新增成員變數與成員方法,但一定要定義介面中所有抽象方法的內容,同時因為介面中的成員方法存取權限都是public,所以在這邊定義成員方法時,也必須加上public,否則會編譯錯誤。

[attach]1283[/attach]

本帖隱藏的內容需要回復才可以瀏覽

作者: 林以諾    時間: 2015-6-14 19:10

  1. package ch79;
  2. public class ch79 {

  3.     public static void main(String[] args) {
  4.         Human h1=new Human("湯尼","專業級","新手級","新不了情","父親","照顧小孩",35,70);
  5.         h1.showProfile();
  6.         h1.eat(0.85);
  7.         h1.showProfile();
  8.         h1.swim(1500.0);
  9.         h1.singProfile();
  10.         h1.homeProfile();
  11.     }

  12. }

  13. abstract class Animal
  14. {
  15.     int age;
  16.     double w;
  17.     Animal(int age,double w)
  18.     {
  19.         this.age=age;
  20.         this.w=w;
  21.     }
  22.     abstract void eat(double x);
  23.     abstract void showProfile();
  24. }

  25. class Human extends Animal
  26. {
  27.     String name,good,bad,song,character,thing;
  28.     Human(String name,String good,String bad,String song,String character,String thing,int age,double w)
  29.     {
  30.         super(age,w);      
  31.         this.name=name;
  32.         this.good=good;
  33.         this.bad=bad;
  34.         this.song=song;
  35.         this.character=character;
  36.         this.thing=thing;
  37.     }
  38.     void eat(double x)
  39.     {
  40.         System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物.");
  41.         w+=x;
  42.     }
  43.     void showProfile()
  44.     {
  45.         System.out.println(name+"今年幾歲,體重"+w+"公斤.");   
  46.     }
  47.     void swim(double y)
  48.     {
  49.             System.out.println(name+"以"+good+"水準,刷刷刷快速的游了"+y);
  50.     }
  51.     void singProfile()
  52.     {
  53.             System.out.println(name+"以"+good+"水準,唱了一首"+song);
  54.     }
  55.     void homeProfile()
  56.     {
  57.             System.out.println(name+"以"+bad+"水準,開始扮演"+character+"的角色"+thing);
  58.     }
  59.    
  60. }
複製代碼

作者: 張瀚仁    時間: 2015-6-16 22:51

以諾,你有用到interface嗎??
作者: 林以諾    時間: 2015-6-27 14:54

  1. package ch79;

  2. public class ch79 {

  3.     public static void main(String[] args) {
  4.         Human h1=new Human("湯尼",35,70);
  5.         h1.showProfile();
  6.         h1.eat(0.85);        
  7.         h1.showProfile();
  8.         h1.swim(1500);
  9.         h1.sing("心不了情");
  10.         h1.takeCare();
  11.     }

  12. }

  13. abstract class Animal
  14. {
  15.     int age;
  16.     double w;
  17.     Animal(int age,double w)
  18.     {
  19.         this.age=age;
  20.         this.w=w;
  21.     }
  22.     abstract void eat(double x);
  23.     abstract void showProfile();
  24. }
  25. interface Swimmer
  26. {
  27.            String Level="專業及";
  28.            void swim(double x);
  29. }
  30. interface Singer
  31. {
  32.        String Level="專業及";           
  33. }
  34. interface Father
  35. {
  36.        String Level="新手及";
  37.        void takeCare();
  38. }

  39. class Human extends Animal
  40. {
  41.     String name;
  42.     Human(String name,int age,double w)
  43.     {
  44.         super(age,w);      
  45.         this.name=name;
  46.     }
  47.     void eat(double x)
  48.     {
  49.         System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物.");
  50.         w+=x;
  51.     }
  52.     void showProfile()
  53.     {
  54.         System.out.println(name+"今年幾歲,體重"+w+"公斤.");   
  55.     }
  56.     public void  swim(double x)
  57.     {
  58.             System.out.println(name+"以"+Swimmer.Level+"水準,刷刷刷快速游了"+x+"公尺");
  59.            
  60.     }
  61.     public void sing(String song)
  62.     {
  63.             System.out.println(name+"以"+Singer.Level+"水準,唱了首"+song+".");
  64.     }
  65.     public void takeCare()
  66.     {
  67.             System.out.println(name+"以"+Father.Level+"水準,開始扮演父親的角色,照顧小孩");
  68.     }
  69.    
  70.    
  71. }
複製代碼

作者: 劉泳鱔    時間: 2015-6-27 14:58

  1. package ch79;

  2. public class ch79 {

  3.     public static void main(String[] args) {
  4.         Human h1=new Human("湯尼",35,70);
  5.         h1.showProfile();
  6.         h1.eat(0.85);        
  7.         h1.showProfile();
  8.         h1.swim(1500);
  9.         h1.sing("張漢仁");
  10.         h1.takeCare();
  11.     }

  12. }

  13. abstract class Animal
  14. {
  15.     int age;
  16.     double w;
  17.     Animal(int age,double w)
  18.     {
  19.         this.age=age;
  20.         this.w=w;
  21.     }
  22.     abstract void eat(double x);
  23.     abstract void showProfile();
  24. }
  25. interface Swimmer
  26. {
  27.            String Level="專業及";
  28.            void swim(double x);
  29. }
  30. interface Singer
  31. {
  32.        String Level="專業及";            
  33. }
  34. interface Father
  35. {
  36.        String Level="新手及";
  37.        void takeCare();
  38. }

  39. class Human extends Animal
  40. {
  41.     String name;
  42.     Human(String name,int age,double w)
  43.     {
  44.         super(age,w);      
  45.         this.name=name;
  46.     }
  47.     void eat(double x)
  48.     {
  49.         System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物.");
  50.         w+=x;
  51.     }
  52.     void showProfile()
  53.     {
  54.         System.out.println(name+"今年幾歲,體重"+w+"公斤.");   
  55.     }
  56.     public void  swim(double x)
  57.     {
  58.             System.out.println(name+"以"+Swimmer.Level+"水準,刷刷刷快速游了"+x+"公尺");
  59.             
  60.     }
  61.     public void sing(String song)
  62.     {
  63.             System.out.println(name+"以"+Singer.Level+"水準,唱了首"+song+".");
  64.     }
  65.     public void takeCare()
  66.     {
  67.             System.out.println(name+"以"+Father.Level+"水準,開始扮演父親的角色,照顧小孩");
  68.     }
  69.    
  70.    
  71. }
複製代碼

作者: 張瀚仁    時間: 2015-6-27 14:59

  1. package ch80;

  2. public class ch80 {

  3.         public static void main(String[] args)
  4.         {
  5.                 Human h1=new Human("湯尼",35,70);
  6.                 h1.showProfile();
  7.                 h1.eat(0.85);
  8.                 h1.showProfile();
  9.                 h1.swim(1500);
  10.                 h1.sing("嗨你好");
  11.                 h1.takeCare();
  12.         }

  13. }
  14. abstract class Animal
  15. {
  16.     int age;
  17.     double w;
  18.     Animal(int age,double w)
  19.     {
  20.             this.age=age;
  21.             this.w=w;
  22.     }
  23.     abstract void eat(double x);
  24.     abstract void showProfile();
  25. }
  26. interface Swimmer
  27. {
  28.     String level="專業級";       
  29.     void swim(double w);
  30. }
  31. interface Singer
  32. {
  33.     String level="專業級";       
  34.     void swim(String song);
  35. }
  36. interface Father
  37. {
  38.     String level="專業級";       
  39.     void takeCare();
  40. }

  41. class Human extends Animal implements Swimmer, Singer,Father
  42. {
  43.     String name;
  44.     Human(String name,int age,double w)
  45.     {
  46.             super(age,w);
  47.             this.name=name;
  48.     }
  49.     void eat(double x)
  50.     {
  51.             System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物");
  52.             w+=x;
  53.     }
  54.     void showProfile()
  55.     {
  56.             System.out.println(name+"今年"+age+"歲,體重"+w+"公斤");
  57.     }
  58.     public void swim(double x)
  59.     {
  60.         System.out.println(name+"以"+Swimmer.level+"水準,刷刷刷地快速游了"+x+"公尺");
  61.     }
  62.     public void sing(String song)
  63.     {
  64.         System.out.println(name+"以"+Singer.level+"水準,唱了"+song);
  65.     }
  66.     public void takeCare()
  67.     {
  68.         System.out.println(name+"以"+Father.level+"開始扮演父親的腳色照顧小孩");
  69.     }
  70. }
複製代碼

作者: 許逸群    時間: 2015-6-27 15:08

  1. package ch80;

  2. public class ch80 {

  3.         public static void main(String[] args)
  4.         {
  5.                 Human h1=new Human("湯尼",35,90);
  6.                 h1.showProfile();
  7.                 h1.eat(0.85);
  8.                 h1.showProfile();
  9.                 h1.swim(1500);
  10.                 h1.sing("嗨你好");
  11.                 h1.takeCare();
  12.         }

  13. }
  14. abstract class Animal
  15. {
  16.     int age;
  17.     double w;
  18.     Animal(int age,double w)
  19.     {
  20.             this.age=age;
  21.             this.w=w;
  22.     }
  23.     abstract void eat(double x);
  24.     abstract void showProfile();
  25. }
  26. interface Swimmer
  27. {
  28.     String level="專業級";        
  29.     void swim(double w);
  30. }
  31. interface Singer
  32. {
  33.     String level="專業級";        
  34.     void swim(String song);
  35. }
  36. interface Father
  37. {
  38.     String level="專業級";        
  39.     void takeCare();
  40. }

  41. class Human extends Animal implements Swimmer, Singer,Father
  42. {
  43.     String name;
  44.     Human(String name,int age,double w)
  45.     {
  46.             super(age,w);
  47.             this.name=name;
  48.     }
  49.     void eat(double x)
  50.     {
  51.             System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物");
  52.             w+=x;
  53.     }
  54.     void showProfile()
  55.     {
  56.             System.out.println(name+"今年"+age+"歲,體重"+w+"公斤");
  57.     }
  58.     public void swim(double x)
  59.     {
  60.         System.out.println(name+"以"+Swimmer.level+"水準,刷刷刷地快速游了"+x+"公尺");
  61.     }
  62.     public void sing(String song)
  63.     {
  64.         System.out.println(name+"以"+Singer.level+"水準,唱了"+song);
  65.     }
  66.     public void takeCare()
  67.     {
  68.         System.out.println(name+"以"+Father.level+"開始扮演父親的腳色照顧小孩");
  69.     }
  70. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/) Powered by Discuz! 7.2