接口定義 關(guān)于java的接口定義方式,以下三種情況下可以采用接口定義方式: 1. 接口中聲明的變量全部為final 和static類型的,并且這個接口的作用在于定義一些值不能改變的變量。 舉個例子: public interface ObjectConstants{ public static final String SPACE = new String(" "); public static final char FORMFEED = ‘\f‘; } 2. 接口中只定義可供實現(xiàn)的抽象方法 EventListener.java public interface EventListener { public void handleEvent(Event evt); } Runnable.java package java.lang; public interface Runnable { public abstract void run(); } 3. 還有一種方式是上述兩種方式的組合,如非必要一般會將這樣一個接口定義拆分成兩個接口定義 抽象類的定義 1. 如果一個類包含一個接口但是不完全實現(xiàn)接口定義的方法,那么該類必須定義成abstract型 例如InputStream.java類的定義方式: package java.io; public abstract class InputStream implements Closeable { // SKIP_BUFFER_SIZE is used to determine the size of skipBuffer private static final int SKIP_BUFFER_SIZE = 2048; // skipBuffer is initialized in skip(long), if needed. private static byte[] skipBuffer; public abstract int read() throws IOException; public int read(byte b[]) throws IOException { return read(b, 0, b.length); } public int read(byte b[], int off, int len) throws IOException { if (b == null) { throw new NullPointerException(); } else if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) { throw new IndexOutOfBoundsException(); } else if (len == 0) { return 0; } int c = read(); if (c == -1) { return -1; } b[off] = (byte)c; int i = 1; try { for (; i < len ; i++) { c = read(); if (c == -1) { break; } if (b != null) { b[off + i] = (byte)c; } } } catch (IOException ee) { } return i; } public long skip(long n) throws IOException { long remaining = n; int nr; if (skipBuffer == null) skipBuffer = new byte[SKIP_BUFFER_SIZE]; byte[] localSkipBuffer = skipBuffer; if (n <= 0) { return 0; } while (remaining > 0) { nr = read(localSkipBuffer, 0, (int) Math.min(SKIP_BUFFER_SIZE, remaining)); if (nr < 0) { break; } remaining -= nr; } return n - remaining; } public int available() throws IOException { return 0; } public void close() throws IOException {} public synchronized void mark(int readlimit) {} public synchronized void reset() throws IOException { throw new IOException("mark/reset not supported"); } public boolean markSupported() { return false; } } 2. 抽象類的方法體中只定義抽象的方法,例如AbstractMethodError.java package java.lang; public class AbstractMethodError extends IncompatibleClassChangeError { public AbstractMethodError() { super();} public AbstractMethodError(String s) { super(s); } } |
|
來自: 鳳舞天煌 > 《JAVA技術(shù)》