標題:
介面
[打印本頁]
作者:
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
package ch79;
public class ch79 {
public static void main(String[] args) {
Human h1=new Human("湯尼","專業級","新手級","新不了情","父親","照顧小孩",35,70);
h1.showProfile();
h1.eat(0.85);
h1.showProfile();
h1.swim(1500.0);
h1.singProfile();
h1.homeProfile();
}
}
abstract class Animal
{
int age;
double w;
Animal(int age,double w)
{
this.age=age;
this.w=w;
}
abstract void eat(double x);
abstract void showProfile();
}
class Human extends Animal
{
String name,good,bad,song,character,thing;
Human(String name,String good,String bad,String song,String character,String thing,int age,double w)
{
super(age,w);
this.name=name;
this.good=good;
this.bad=bad;
this.song=song;
this.character=character;
this.thing=thing;
}
void eat(double x)
{
System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物.");
w+=x;
}
void showProfile()
{
System.out.println(name+"今年幾歲,體重"+w+"公斤.");
}
void swim(double y)
{
System.out.println(name+"以"+good+"水準,刷刷刷快速的游了"+y);
}
void singProfile()
{
System.out.println(name+"以"+good+"水準,唱了一首"+song);
}
void homeProfile()
{
System.out.println(name+"以"+bad+"水準,開始扮演"+character+"的角色"+thing);
}
}
複製代碼
作者:
張瀚仁
時間:
2015-6-16 22:51
以諾,你有用到interface嗎??
作者:
林以諾
時間:
2015-6-27 14:54
package ch79;
public class ch79 {
public static void main(String[] args) {
Human h1=new Human("湯尼",35,70);
h1.showProfile();
h1.eat(0.85);
h1.showProfile();
h1.swim(1500);
h1.sing("心不了情");
h1.takeCare();
}
}
abstract class Animal
{
int age;
double w;
Animal(int age,double w)
{
this.age=age;
this.w=w;
}
abstract void eat(double x);
abstract void showProfile();
}
interface Swimmer
{
String Level="專業及";
void swim(double x);
}
interface Singer
{
String Level="專業及";
}
interface Father
{
String Level="新手及";
void takeCare();
}
class Human extends Animal
{
String name;
Human(String name,int age,double w)
{
super(age,w);
this.name=name;
}
void eat(double x)
{
System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物.");
w+=x;
}
void showProfile()
{
System.out.println(name+"今年幾歲,體重"+w+"公斤.");
}
public void swim(double x)
{
System.out.println(name+"以"+Swimmer.Level+"水準,刷刷刷快速游了"+x+"公尺");
}
public void sing(String song)
{
System.out.println(name+"以"+Singer.Level+"水準,唱了首"+song+".");
}
public void takeCare()
{
System.out.println(name+"以"+Father.Level+"水準,開始扮演父親的角色,照顧小孩");
}
}
複製代碼
作者:
劉泳鱔
時間:
2015-6-27 14:58
package ch79;
public class ch79 {
public static void main(String[] args) {
Human h1=new Human("湯尼",35,70);
h1.showProfile();
h1.eat(0.85);
h1.showProfile();
h1.swim(1500);
h1.sing("張漢仁");
h1.takeCare();
}
}
abstract class Animal
{
int age;
double w;
Animal(int age,double w)
{
this.age=age;
this.w=w;
}
abstract void eat(double x);
abstract void showProfile();
}
interface Swimmer
{
String Level="專業及";
void swim(double x);
}
interface Singer
{
String Level="專業及";
}
interface Father
{
String Level="新手及";
void takeCare();
}
class Human extends Animal
{
String name;
Human(String name,int age,double w)
{
super(age,w);
this.name=name;
}
void eat(double x)
{
System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物.");
w+=x;
}
void showProfile()
{
System.out.println(name+"今年幾歲,體重"+w+"公斤.");
}
public void swim(double x)
{
System.out.println(name+"以"+Swimmer.Level+"水準,刷刷刷快速游了"+x+"公尺");
}
public void sing(String song)
{
System.out.println(name+"以"+Singer.Level+"水準,唱了首"+song+".");
}
public void takeCare()
{
System.out.println(name+"以"+Father.Level+"水準,開始扮演父親的角色,照顧小孩");
}
}
複製代碼
作者:
張瀚仁
時間:
2015-6-27 14:59
package ch80;
public class ch80 {
public static void main(String[] args)
{
Human h1=new Human("湯尼",35,70);
h1.showProfile();
h1.eat(0.85);
h1.showProfile();
h1.swim(1500);
h1.sing("嗨你好");
h1.takeCare();
}
}
abstract class Animal
{
int age;
double w;
Animal(int age,double w)
{
this.age=age;
this.w=w;
}
abstract void eat(double x);
abstract void showProfile();
}
interface Swimmer
{
String level="專業級";
void swim(double w);
}
interface Singer
{
String level="專業級";
void swim(String song);
}
interface Father
{
String level="專業級";
void takeCare();
}
class Human extends Animal implements Swimmer, Singer,Father
{
String name;
Human(String name,int age,double w)
{
super(age,w);
this.name=name;
}
void eat(double x)
{
System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物");
w+=x;
}
void showProfile()
{
System.out.println(name+"今年"+age+"歲,體重"+w+"公斤");
}
public void swim(double x)
{
System.out.println(name+"以"+Swimmer.level+"水準,刷刷刷地快速游了"+x+"公尺");
}
public void sing(String song)
{
System.out.println(name+"以"+Singer.level+"水準,唱了"+song);
}
public void takeCare()
{
System.out.println(name+"以"+Father.level+"開始扮演父親的腳色照顧小孩");
}
}
複製代碼
作者:
許逸群
時間:
2015-6-27 15:08
package ch80;
public class ch80 {
public static void main(String[] args)
{
Human h1=new Human("湯尼",35,90);
h1.showProfile();
h1.eat(0.85);
h1.showProfile();
h1.swim(1500);
h1.sing("嗨你好");
h1.takeCare();
}
}
abstract class Animal
{
int age;
double w;
Animal(int age,double w)
{
this.age=age;
this.w=w;
}
abstract void eat(double x);
abstract void showProfile();
}
interface Swimmer
{
String level="專業級";
void swim(double w);
}
interface Singer
{
String level="專業級";
void swim(String song);
}
interface Father
{
String level="專業級";
void takeCare();
}
class Human extends Animal implements Swimmer, Singer,Father
{
String name;
Human(String name,int age,double w)
{
super(age,w);
this.name=name;
}
void eat(double x)
{
System.out.println(name+"咕嚕咕嚕吃下了"+x+"公斤的食物");
w+=x;
}
void showProfile()
{
System.out.println(name+"今年"+age+"歲,體重"+w+"公斤");
}
public void swim(double x)
{
System.out.println(name+"以"+Swimmer.level+"水準,刷刷刷地快速游了"+x+"公尺");
}
public void sing(String song)
{
System.out.println(name+"以"+Singer.level+"水準,唱了"+song);
}
public void takeCare()
{
System.out.println(name+"以"+Father.level+"開始扮演父親的腳色照顧小孩");
}
}
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://seed.istak.org.tw/)
Powered by Discuz! 7.2