java學習之路 之 高階類特性2-介面(interface)-練習題
阿新 • • 發佈:2019-02-03
// 介面通常用形容詞來描述 , 用以描述一種能力.
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();
}
}