接口定义
关于java的接口定义方式,以下三种情况下可以采用接口定义方式:
◆接口中声明的变量全部为final 和static类型的,并且这个接口的作用在于定义一些值不能改变的变量。
举个例子:
public interface ObjectConstants{
public static final String SPACE = new String(" ");
public static final char FORMFEED = 'f';
}
◆接口中只定义可供实现的抽象方法
EventListener.java
publicinterface EventListener {
public voidhandleEvent(Event evt);
}
Runnable.java
package java.lang;
publicinterface Runnable {
publicabstract void run();
}
◆还有一种方式是上述两种方式的组合,如非必要一般会将这样一个接口定义拆分成两个接口定义
抽象类的定义
1.如果一个类包含一个接口但是不完全实现接口定义的方法,那么该类必须定义成abstract型
例如nputStream.java类的定义方式:
package java.io;
public abstract class InputStream implements Closeable {
//SKIP_BUFFER_SIZE is used to determine the size of skipBuffer
privatestatic final int SKIP_BUFFER_SIZE = 2048;
//skipBuffer is initialized in skip(long), if needed.
privatestatic byte[] skipBuffer;
publicabstract int read() throws IOException;
public intread(byte b[]) throws IOException {
returnread(b, 0, b.length);
}
public intread(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) {
}
returni;
}
public long skip(long n) throws IOException{
longremaining = n;
intnr;
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 intavailable() throws IOException {
return0;
}
public voidclose() throws IOException {}
publicsynchronized void mark(int readlimit){}
publicsynchronized void reset() throws IOException {
throw newIOException("mark/reset not supported");
}
publicboolean markSupported() {
returnfalse;
}
}
2.抽象类的方法体中只定义抽象的方法,例如AbstractMethodError.java
package java.lang;
public classAbstractMethodError extends IncompatibleClassChangeError {
publicAbstractMethodError() {
super();}
publicAbstractMethodError(String s) {
super(s);}
}