Java的返回型別的幾點注意
阿新 • • 發佈:2019-01-05
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;
}
}