接口和抽象类的定义方式举例说明

关于java的接口定义方式,以下三种情况下可以采用接口定义方式:

1. 接口中声明的变量全部为final 和static类型的,并且这个接口的作用在于定义一些值不能改变的变量。

举个例子:

public interface ObjectConstants{

public static final String SPACE = new String(" ");

public static final char FORMFEED = '\f';

}

2. 接口中只定义可供实现的抽象方法

EventListener.java

public interface EventListener {

public void handleEvent(Event evt);

}

Runnable.java

package http://www.360docs.net/doc/info-2745d62f915f804d2b16c18a.htmlng;

public interface Runnable {

public abstract void run();

}

3. 还有一种方式是上述两种方式的组合,如非必要一般会将这样一个接口定义拆分成两个接口定义

抽象类的定义

1. 如果一个类包含一个接口但是不完全实现接口定义的方法,那么该类必须定义成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) {

}

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 http://www.360docs.net/doc/info-2745d62f915f804d2b16c18a.htmlng;

public class AbstractMethodError extends IncompatibleClassChangeError { public AbstractMethodError() {

super();}

public AbstractMethodError(String s) {

super(s); }

}

相关文档