1. 程式人生 > >java學習之路 之 高階類特性2-介面(interface)-練習題

java學習之路 之 高階類特性2-介面(interface)-練習題

// 介面通常用形容詞來描述 , 用以描述一種能力.

public interface Flyer { // 介面 : 是對事物行為的抽象定義, 介面中只允許抽象方法,和全域性常量

    public static final int num = 10;

    public void takeOff();

    public abstract void fly();

    public void land();
}

class Plane implements Flyer { // 具體類可以實現介面, 意味著要實現介面中的所有抽象方法

    @Override
    public
void takeOff() { System.out.println("划行2小時"); } @Override public void fly() { System.out.println("飛機飛行中..."); } @Override public void land() { System.out.println("飛機著陸, 耳朵不舒服"); } } abstract class Pet2 { // 可以包含屬性, 構造器,普通方法, 抽象方法 private
String name; private int age; private double weight; public Pet2() {} public Pet2(String name, int age, double weight) { this.name = name; this.age = age; this.weight = weight; } public void setName(String name) { this.name = name; } public
String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } public void setWeight(double weight) { this.weight = weight; } public double getWeight() { return weight; } @Override public String toString() { return "名字:" + name + ",年齡:" + age + ",體重:" + weight; } // 抽象方法 : 只有方法簽名沒有方法體, 被abstract修飾 public abstract void speak(); public abstract void eat(); } class Bird extends Pet2 implements Flyer { // 一個具體類同時繼承父類並實現介面 private int flySpeed; public Bird() {} public Bird(String name, int age, double weight, int flySpeed) { super(name, age, weight); this.flySpeed = flySpeed; } public void setFlySpeed(int flySpeed) { this.flySpeed = flySpeed; } public int getFlySpeed() { return flySpeed; } @Override public String toString() { return super.toString() + ",飛行速度:" + flySpeed; } @Override public void speak() { System.out.println("吱吱吱.."); } @Override public void eat() { System.out.println("小鳥吃大蟲"); } @Override public void takeOff() { System.out.println("直接就飛,真痛快"); } @Override public void fly() { System.out.println("想往哪兒飛"); } @Override public void land() { System.out.println("電線杆就行"); } } class FlyerTest3 { public static void main(String[] args) { Pet2 pet = new Bird("小飛", 2, 0.5, 30); pet.eat(); //pet.fly(); 在Pet2類中並未定義fly() Flyer flyer = (Flyer)pet; flyer.fly(); } } class FlyerTest2 { public static void main(String[] args) { Pet2 pet = new Bird("小飛", 2, 0.5, 30); /* pet.eat(); pet.fly(); pet.land(); Flyer f = pet; // 多型 //f.eat(); f.takeOff(); */ } } class FlyerTest { public static void main(String[] args) { //Flyer f = new Flyer(); Flyer f = new Plane(); System.out.println(f.toString()); // 不存在一個純的介面物件. f.takeOff(); f.fly(); f.land(); } } //定義一個介面用來實現兩個物件的比較。 interface CompareObject{ public int compareTo(Object o); //若返回值是0, 代表相等;若為正數,代表當前物件大;負數代表當前物件小 } //定義一個Circle類。 class Circle { private double radius; public Circle() {} public Circle(double radius) { this.radius = radius; } public void setRadius(double radius) { this.radius = radius; } public double getRadius() { return radius; } @Override public String toString() { return "半徑:" + radius; } } /* 定義一個ComparableCircle類,繼承Circle類並且實現CompareObject介面。在ComparableCircle類 中給出介面中方法compareTo的實現體,用來比較兩個圓的半徑大小。 */ class ComparableCircle extends Circle implements CompareObject { public ComparableCircle() {} public ComparableCircle(double radius) { super(radius); } @Override public String toString() { return super.toString(); } @Override public int compareTo(Object o) { return (int)(((Circle)o).getRadius() - getRadius()); } } //定義一個Rectangle類。 class Rectangle { private double length; private double width; public Rectangle() {} public Rectangle(double length, double width) { this.length = length; this.width = width; } public void setLength(double length) { this.length = length; } public double getLength() { return length; } public void setWidth(double width) { this.width = width; } public double getWidth() { return width; } @Override public String toString() { return "矩形長:" + length + ",寬:" + width; } } /* 定義一個ComparableCircle類,繼承Circle類並且實現CompareObject介面。在ComparableCircle類 中給出介面中方法compareTo的實現體,用來比較兩個圓的半徑大小。 */ class ComparableRectangle extends Rectangle implements CompareObject { public ComparableRectangle() {} public ComparableRectangle(double length, double width) { super(length, width); } @Override public String toString() { return super.toString() + ",的矩形的面積"; } @Override public int compareTo(Object o) { return (int)(((Rectangle)o).getLength() * ((Rectangle)o).getWidth() - getLength() * getWidth()); } } /* 定義一個測試類TestInterface,建立兩個ComparableCircle物件,呼叫compareTo方法比較兩個類的半徑大小。 */ public class TestInterface { public static void main(String[] args) { CompareObject c1 = new ComparableCircle(5.0); CompareObject c2 = new ComparableCircle(6.5); int i = c1.compareTo(c2); if (i > 0) { System.out.println(c2 + " 大於 " + c1); } else if (i < 0){ System.out.println(c2 + " 小於 " + c1); } else { System.out.println(c2 + " 等於 " + c1); } CompareObject c3 = new ComparableRectangle(5.0,8.0); CompareObject c4 = new ComparableRectangle(5.5,4.0); int j = c3.compareTo(c4); if (j > 0) { System.out.println(c4 + " 大於 " + c3); } else if (j < 0){ System.out.println(c4 + " 小於 " + c3); } else { System.out.println(c4 + " 等於 " + c3); } } } public interface USB { public void connect(); public void work(); public void disconnect(); } abstract class Device { private static int currentID = 1; private final int ID; private String name; { ID = currentID++; } public Device() { } public Device(String name) { this.name = name; } /* public void setID(int ID) { this.ID = ID; }*/ public int getID() { return ID; } public void setName(String name) { this.name = name; } public String getName() { return name; } @Override public String toString() { return "ID:" + ID + ",裝置名稱:" + name; } public abstract void startup(); public abstract void shutdown(); } class Udisk extends Device implements USB { public Udisk() {} public Udisk(String name) { super(name); } @Override public void startup() { System.out.println("U盤加電啟動"); } @Override public void shutdown() { System.out.println("U盤已經關閉, 可以拔出"); } @Override public void connect() { System.out.println("U盤插入, 容量識別.."); } @Override public void work() { System.out.println("U盤資料複製中...."); } @Override public void disconnect() { System.out.println("U盤拔出.."); } } class Camera implements USB { @Override public void connect() { System.out.println("攝象頭插入, 調焦中..."); } @Override public void work() { System.out.println("開錄, 請微笑"); } @Override public void disconnect() { System.out.println("錄完了, 請拔出"); } } class USBTest2 { public static void main(String[] args) { Device dev = new Udisk("金士頓64G"); dev.startup(); dev.shutdown(); USB usb = (USB)dev; usb.connect(); usb.work(); usb.disconnect(); System.out.println(usb); } } class USBTest { public static void main(String[] args) { USB usb1 = new Udisk(); usb1.connect(); usb1.work(); usb1.disconnect(); USB usb2 = new Camera(); usb2.connect(); usb2.work(); usb2.disconnect(); } }