1. 程式人生 > >Java的返回型別的幾點注意

Java的返回型別的幾點注意

1. 在方法重寫時不能變更宣告的返回型別,但可以為宣告的返回型別的子類

public class Foo{
	void go() { }
}
class Bar extends Foo {
	String go() { // 不合法
		return null;
	}
}

該段程式碼會報如下錯誤
Multiple markers at this line
	- overrides Foo.go
	- The return type is incompatible with 
	 Foo.go()

但是如果在繼承的同時還進行了過載,則宣告的返回型別可以改變,如下程式碼能正常執行:
public class Foo{
	void go() { }
}
class Bar extends Foo {
	String go(int x) {
		return null;
	}
}

重寫的方法宣告的返回型別可以為父類方法的子類:

public class Foo{
	Foo go(){
		return new Foo();
	}
}
class Bar extends Foo {
	Bar go() {
		return new Bar();
	}
}
2. 如果宣告的返回型別為一個物件,則return返回的型別可以為null:
public class Foo{
	Foo go() {
		return null;
	}
}

3. return的型別可以為宣告的返回型別的子類:
class Bar extends Foo {
	Foo go() {
		return new Bar();
	}
}

4. 當宣告的返回型別為抽象類或者介面時,return的型別可以為繼承該抽象類或者實現該介面的類:
abstract class Foo{
	abstract  Foo go();
}
class Bar extends Foo {
	Foo go() {
		return new Bar();
	}
}

interface runnable{
	runnable go();
}
class Bar implements runnable {
	public runnable go() {
		return new Bar();
	}
}

5. 當宣告的發揮型別為void時,可以return但是不能return任何值,也不能return null,
abstract class Foo{
	abstract void go();
}
class Bar extends Foo {
	public void go() {
		return;
	}
}