Board logo

標題: 介面 (一) [打印本頁]

作者: tonyh    時間: 2019-9-23 19:39     標題: 介面 (一)

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

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

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

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

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



[設計導引]

1. 定義抽象類別 Animal, 該類別包含了
    兩個屬性成員: age 與 w
    建構子
    兩個抽象方法: eat(double x) 與 showProfile()
2. 定義一般類別 Human 繼承 Animal, 在該類別中新增
    一個屬性成員: name
    建構子
    實作自父類別繼承下來的兩個抽象方法: eat(double x) 與 showProfile()
3. 定義三個介面: Swimmer, Singer, Father
    分別包含了常數變數 LEVEL="專業級" 或 "新手級" 等
    以及 swim(double x), sing(String song), takeCare() 等抽象方法
4. 讓類別 Human 實作 Swimmer, Singer, Father 這三個介面
    並實作所有抽象方法: swim(double x), sing(String song), takeCare()
5. 在 Human 類別下新增一物件, 並利用該物件帶出所有方法, 如執行畫面所示

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

作者: 趙一鳴    時間: 2019-9-23 20:31

  1. public class Ch72
  2. {

  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 a,double w)
  19.     {
  20.             age = a;
  21.             this.w = w;
  22.     }
  23.    
  24.     abstract void eat(double x);
  25.     abstract void showProfile();
  26.    
  27. }


  28. interface Swimmer
  29. {
  30.     String LEVEL = "專業級";
  31.     void swim(double x);
  32. }

  33. interface Singer
  34. {
  35.     String LEVEL = "專業級";
  36.     void sing(String song);
  37. }

  38. interface Father
  39. {
  40.     String LEVEL = "新手級";
  41.     void takeCare();
  42. }

  43. class Human extends Animal implements Swimmer,Singer,Father
  44. {
  45.     String name;
  46.         Human(String n ,int a, double w)
  47.     {
  48.                 super(a, w);
  49.                 name = n;
  50.         }
  51.         @Override
  52.         public void takeCare() {
  53.                 System.out.println(name+"以"+Father.LEVEL+"開始扮演父親的角色,照顧小孩");
  54.                
  55.         }
  56.         @Override
  57.         public void sing(String song) {
  58.                 System.out.println(name+"以"+Singer.LEVEL+"的水準,唱了一首"+song);
  59.                
  60.         }
  61.         @Override
  62.         public void swim(double x) {
  63.                 System.out.println(name+"以"+Swimmer.LEVEL+"的水準,快速地游了"+x+"公尺");
  64.                
  65.         }
  66.         @Override
  67.         void eat(double x) {
  68.                 System.out.println(name+"快速地吃下了"+x+"公斤的食物");
  69.                 w+=x;
  70.         }
  71.         @Override
  72.         void showProfile() {
  73.                 System.out.println(name+"今年"+age+"歲,體重"+w+"公斤");
  74.                
  75.         }

  76.    
  77. }
複製代碼

作者: 洪翊庭    時間: 2019-9-23 20:32

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

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

  24. interface Swimmer
  25. {
  26.     String LEVEL="專業級";
  27.     void swim(double x);
  28. }

  29. interface Singer
  30. {
  31.     String LEVEL="專業級";
  32.     void sing(String x);
  33. }

  34. interface Father
  35. {
  36.     String LEVEL="新手級";
  37.     void takeCare();
  38. }

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

作者: 戴嘉禾    時間: 2019-9-23 20:35

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

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

  26. interface Swimmer
  27. {
  28.     String LEVEL="專業級";
  29.     void swim(double x);
  30. }

  31. interface Singer
  32. {
  33.     String LEVEL="專業級";
  34.     void sing(String x);
  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 n,int a,double w)
  45.     {
  46.             super(a,w);
  47.             name=n;
  48.     }
  49.    
  50.     void showProfile()
  51.     {
  52.             System.out.println(name+"今年"+age+"歲,體重"+w+"公斤.");
  53.     }
  54.    
  55.     void eat(double x)
  56.     {
  57.         System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物.");
  58.         w+=x;
  59.     }
  60.    
  61.     public void swim(double x)
  62.     {
  63.             System.out.println(name+"以"+Swimmer.LEVEL+"水準,刷刷刷快速游了"+x+"公尺.");
  64.     }
  65.    
  66.     public void sing(String x)
  67.     {
  68.             System.out.println(name+"以"+Singer.LEVEL+"水準,唱了一首"+x+".");
  69.     }
  70.    
  71.     public void takeCare()
  72.     {
  73.             System.out.println(name+"以"+Father.LEVEL+"水準,開始扮演父親的角色,照顧小孩.");
  74.     }   
  75. }
複製代碼

作者: 李沛昂    時間: 2019-9-23 20:37

  1. public class Ch00 {

  2.         public static void main(String[] args) {
  3.                 Human h1=new Human("湯尼",35,70);
  4.                 h1.showProfile();
  5.                 h1.eat(0.85);
  6.                 h1.showProfile();
  7.                 h1.swim(1500);
  8.                 h1.Sing("無敵鐵金剛");
  9.                 h1.takeCare();
  10.         }
  11. }
  12. abstract class Animal{
  13.         int age;
  14.         double w;
  15.         Animal(int a,double w)
  16.         {
  17.                 age=a;
  18.                 this.w=w;
  19.         }
  20.         abstract void eat(double x);
  21.         abstract void showProfile();
  22. }
  23. interface Swimmer
  24. {
  25.     String LEVEL="專業級"        ;
  26.     void swim(double x);
  27. }
  28. interface Singer
  29. {
  30.     String LEVEL="專業級"        ;
  31.     void Sing(String x);
  32. }
  33. interface Father
  34. {
  35.     String LEVEL="新手級"        ;
  36.     void takeCare();
  37. }
  38. class Human extends Animal implements Singer,Swimmer,Father
  39. {
  40.         String name;
  41.         Human(String n,int a,double w)
  42.         {
  43.                 super(a,w);
  44.                 name=n;
  45.         }
  46.         @Override
  47.         public void takeCare() {
  48.                 System.out.println(name+"以"+Father.LEVEL+"水準,開始扮演父親的角色,照顧小孩.");
  49.                
  50.         }
  51.         @Override
  52.         public void swim(double x) {
  53.             System.out.println(name+"以"+Swimmer.LEVEL+"水準,刷刷刷快速的游了"+x+"公尺.");
  54.         }
  55.         @Override
  56.         public void Sing(String x) {
  57.                 System.out.println(name+"以"+Singer.LEVEL+"唱了一首"+x);
  58.         }
  59.         @Override
  60.         void eat(double x) {
  61.                 System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物.");
  62.                 w+=x;
  63.         }
  64.         @Override
  65.         void showProfile() {
  66.                 System.out.println(name+"今年"+age+"歲,體重"+w+"公斤.");
  67.         }
  68. }
複製代碼

作者: 黃宇綸    時間: 2019-9-23 20:39

本帖最後由 黃宇綸 於 2019-9-29 15:06 編輯
  1. public class Ch01 {
  2.         public static void main(String[] args) {
  3.         Human h=new Human("湯尼",35,70);
  4.         h.showProfile();
  5.         h.eat(0.85);
  6.         h.showProfile();
  7.         h.swim(1500);
  8.         h.sing("無敵鐵金剛");
  9.         h.takeCare();
  10.         }
  11. }
  12. abstract class Animal{
  13.         int age;
  14.         double w;
  15.         Animal(int a,double w)
  16.         {
  17.                 age=a;
  18.                 this.w=w;
  19.         }
  20.         abstract void eat(double x);
  21.         abstract void showProfile();
  22. }
  23. interface Swimmer
  24. {
  25.         String l="專業級";
  26.         void swim(double x);
  27. }
  28. interface Singer
  29. {
  30.         String l="專業級";
  31.         void sing(String x);
  32. }
  33. interface Father
  34. {
  35.         String l="專業級";
  36.         void takeCare();
  37. }
  38. class Human extends Animal implements Singer,Swimmer,Father
  39. {
  40.     String name;
  41.         Human(String n,int a, double w) {
  42.                 super(a, w);
  43.                 name=n;
  44.         }
  45.         public void takeCare() {
  46.         System.out.println(name+"以"+Father.l+"水準,開始扮演父親的角色,照顧小孩.");
  47.         }
  48.         public void swim(double x) {
  49.         System.out.println(name+"以"+Swimmer.l+"水準,刷刷刷快速得游了"+x+"公尺.");
  50.         }
  51.         public void sing(String x) {
  52.         System.out.println(name+"以"+Singer.l+"水準,唱了一首"+x);
  53.         }

  54.         void eat(double x) {
  55.         System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物.");
  56.         }

  57.         void showProfile(int x) {
  58.         System.out.println(name+"今年"+age+"歲,體重"+w+"公斤.");
  59.         w+=x;
  60.         }
  61. }
複製代碼

作者: 黃宇瑄    時間: 2019-9-23 20:40

  1. public class Ch01
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Human h=new Human("湯尼",35,70);
  6.                 h.showProfile();
  7.                 h.eat(0.85);
  8.                 h.showProfile();
  9.                 h.swim(1500);
  10.                 h.sing("無敵鐵金剛");
  11.                 h.takeCare();
  12.         }
  13. }
  14. abstract class Animal
  15. {
  16.     int age;
  17.     double w;
  18.     Animal(int a,double w)
  19.     {
  20.             age=a;
  21.             this.w=w;
  22.     }
  23.     abstract void eat(double x);
  24.     abstract void showProfile();
  25. }
  26. interface Swimmer
  27. {
  28.         String l="專業級";
  29.         void swim(double x);
  30. }
  31. interface Singer
  32. {
  33.         String l="專業級";
  34.         void sing(String x);
  35. }
  36. interface Father
  37. {
  38.         String l="專業級";
  39.         void takeCare();
  40. }
  41. class Human extends Animal implements Singer,Swimmer,Father
  42. {
  43.     String name;
  44.         Human(String n,int a, double w)
  45.         {
  46.                 super(a, w);
  47.                 name=n;
  48.         }
  49.         @Override
  50.         public void takeCare()
  51.         {
  52.             System.out.println(name+"以"+Father.l+"水準,開始演父親的角色,照顧小孩‧");
  53.         }
  54.         @Override
  55.         public void swim(double x)
  56.         {
  57.                  System.out.println(name+"以"+Swimmer.l+"水準,刷刷刷快速的游了"+x+"公尺‧");
  58.         }
  59.         @Override
  60.         public void sing(String x)
  61.         {
  62.                 System.out.println(name+"以"+Singer.l+"水準,唱了一首"+x);
  63.         }
  64.         @Override
  65.         void eat(double x)
  66.         {
  67.                 System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物‧");
  68.         }
  69.         @Override
  70.         void showProfile()
  71.         {
  72.                 System.out.println(name+"今年"+age+"歲,體重"+w+"公斤.");
  73.         }
  74. }
複製代碼

作者: 洪翊展    時間: 2019-9-23 20:45

  1. public class Ch72 {

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

  10.         }

  11. }
  12. abstract class Animal
  13. {
  14.         int age;
  15.         double we;
  16.         Animal(int a,double w)
  17.         {
  18.                 age=a;
  19.                 we=w;
  20.         }
  21.         abstract void eat(double x);
  22.         abstract void showProfile();
  23.        
  24. }
  25. interface Swimmer {
  26.    String LEVEL ="專業級";
  27.         void swim(double x);
  28. }
  29. interface Singer {
  30.         String LEVEL ="專業級";
  31.         void sing(String s);
  32.        
  33. }
  34. interface Father {
  35.         String LEVEL ="新手級";
  36.         void takeCare();
  37. }
  38. class Human extends Animal implements Swimmer ,Singer ,Father
  39. {
  40.         String name;
  41.        
  42.         Human(String n,int a,double w)
  43.         {
  44.                 super(a,w);
  45.                 name=n;
  46.                
  47.         }
  48.        
  49.                
  50.        


  51.         @Override
  52.         void eat(double x) {
  53.                 System.out.println(name+"吃下了"+x+"公斤的食物");
  54.                 we+=x;
  55.         }
  56.         @Override
  57.         void showProfile() {
  58.                 System.out.println(name+"今年"+age+"歲 體重"+we+"公斤");
  59.                
  60.         }
  61.        
  62.                
  63.         @Override
  64.         public void takeCare() {
  65.                 System.out.println(name+"以"+Father.LEVEL+"開始扮演父親的角色,照顧小孩");
  66.                
  67.         }
  68.         @Override
  69.         public void sing(String s) {
  70.                 System.out.println(name+"以"+Singer.LEVEL+"的水準,唱了一首"+s);
  71.                
  72.         }
  73.         @Override
  74.         public void swim(double x) {
  75.                 System.out.println(name+"以"+Swimmer.LEVEL+"的水準,快速地游了"+x+"公尺");
  76.                
  77.         }



  78.        
  79.                
  80. }
複製代碼

作者: 鄭楀諺    時間: 2019-9-28 15:33

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
作者: 鄭楀諺    時間: 2019-9-28 16:22

  1. public class Morris {

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

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

  24. interface swimmer
  25. {
  26.         String Level = "專業級";
  27.         void swim(double m);
  28. }

  29. interface singer
  30. {
  31.         String Level = "專業級";
  32.         void sing(String x);
  33. }

  34. interface father
  35. {
  36.         String Level = "新手級";
  37.         void takeCare();
  38. }

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





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