抽象類別(Abstract Class)
在類別名稱前加上abstract存取控制字符,這個類別會變成抽象類別,表示其只有抽象的概念,不能產生物件。
像昨天提到的Land類別,只是用來表示某種形狀的土地,沒有用來產生物件,所以也可以寫成抽象類別。
abstract class Land{
double area(){
return 0;
}
}
抽象方法(Abstract Method)
其中,Land類別有area()方法,只是為了讓其他衍生類別(圓形、長方形)有area()方法 ,本身不執行任何動作,所以此方法也可以加上abstract,寫成抽象方法(Abstract Method)。
abstract class Land{
abstract double area();
}
如果某個類別中有抽象方法,則此類別一定要標註成抽象類別。但抽象類別不一定要有抽象方法。
介面(Interface)
介面代表一群共通的行為,他和類別有些相似,但介面只用來描述某種行為方式。
interface 介面名稱{
介面中的方法
}
介面的實作
要使用介面的類別,在類別名稱之後使用implements保留字及介面名稱,就可以實作該介面。
package com.mycompany.testseven;
public class Shape {
protected double x,y;
public Shape(double x,double y){
this.x=x;
this.y=y;
}
public String toString(){
return "原點:("+x+", "+y+")";
}
}
package com.mycompany.testseven;
public class Circle extends Shape implements Surfacing{
protected double r;
protected final double PI=3.14;
public Circle(double x,double y,double r){
super(x,y);
this.r=r;
}
public double area(){
return (r*r*PI);
}
public String toString(){
return super.toString()+", 半徑:"+r;
}
}
package com.mycompany.testseven;
public class Rectangle extends Shape implements Surfacing{
protected double w,h;
public Rectangle(double x,double y,double w,double h){
super(x,y);
this.w=w;
this.h=h;
}
public double area(){
return (w*h);
}
public String toString(){
return super.toString()+", 長:"+w+", 寬:"+h;
}
}
package com.mycompany.testseven;
interface Surfacing{
double area();
}
public class testSeven {
public static void main(String[] args) {
Rectangle re= new Rectangle(3,4,7,9);
Circle ci=new Circle(3,4,10);
System.out.println("Rectangle"+re.toString());
System.out.println("長方形面積:"+re.area());
System.out.println("Circle"+ci.toString());
System.out.println("圓形面積:"+ci.area());
}
}
實作Surfacing介面。
參考資料:
最新java程式語言第六版