更新時間:2019-09-10 16:32:35 來源:動力節(jié)點 瀏覽2671次
方法的繼承與屬性的繼承有很大的不同,屬性任何繼承方式均可,而方法則有各種限制,于是動力節(jié)點Java培訓(xùn)機構(gòu)小編在這里做了一個簡單的總結(jié)。
1、修飾符相同的方法覆蓋,即只改內(nèi)部,不改外部
2、訪問權(quán)限不同的方法覆蓋,子類只能相對父類越來越寬松,例如父類是public,子類就不能是缺省或protect,private
3、返回值的類型覆蓋,只允許相容的返回類型,例如不能將返回值為int型改為double型,但是復(fù)合類型則例外
4、final的方法覆蓋,只能是父類無,子類有,而不能是父類有,子類無
5、static(靜態(tài))的方法覆蓋不能有任何變動,即父類有,子類必須有,父類無,子類也必須無
實例如下:
父類:
package ExtendMethod;
public class CommonMethod {
protected int x=100;
public int getX() {//定義一個普通返回值的實例方法
return x;
}
public CommonMethod getObject() {//定義一個返回復(fù)合類型的方法
return new CommonMethod();
}
public final void setX(int ix) {
x=ix;
}
protected void proShowMsg() {//定義一個具有保護(hù)權(quán)限的方法
System.out.println("this is protected ShowMsg() in Common class");
}
public void pubShowMsg() {//定義一個具有公共訪問權(quán)限的方法
System.out.println("this is public showMsg() in Common class");
}
static public void stShowMsg() {//定義一個靜態(tài)方法
System.out.println("this is static showMsg() in Common class");
}
}
一、修飾符相同的可以任意覆蓋:
public class OverrideMember_1 extends Common{
//覆蓋父類中的同名實例方法
public void pubShowMsg() {
System.out.println("this is public showMsg in derive class");
}
//覆蓋父類中的同名靜態(tài)方法
static public void stShowMsg() {
System.out.println("this is static showMsg() in derive class");
}
//可以任意覆蓋
public static void main(String args[]) {
OverrideMember_1 oa =new OverrideMember_1();
oa.pubShowMsg();
oa.proShowMsg();
}
}
二、訪問權(quán)限不同的覆蓋,只能越來越寬松,private——>public的方向
public class OverrideMember_2 extends Common{
public void proShowMsg() {//覆蓋父類中的protect方法,public > protect,正確
System.out.println("this is public ShowMsg()");
}
/*protected void pubShowMsg() {//權(quán)限越來越嚴(yán)格,錯誤,protect < public
System.out.println("this is protect ShowMsg()");
}*/
}
三、返回值類型的覆蓋
public class OverrideMember_3 extends Common {
//覆蓋getX()方法,但返回的數(shù)據(jù)類型不同,原方法是int型,錯誤
/*public double getX() {
return (double)x;
}*/
//覆蓋getObject(),返回類型相容,正確,原方法的返回類型是新common對象,復(fù)合類型
public OverrideMember_3 getObject() {
return new OverrideMember_3();
}
}
四、final的方法覆蓋,只能從無到有,不能從有到無
public class OverrideMember_4 extends Common{
//覆蓋getX()方法,并將其指定為最終方法,正確,原方法為public int getX()
public final int getX() {
return x;
}
//覆蓋最終方法,錯誤,原方法為 public final void setX()
/*public void setX(int ix) {
x=ix;
}*/
}
五、static不能有任何改變
public class OverrideMember_5 extends Common{
//試圖覆蓋實例方法,將其改為靜態(tài)方法,錯誤,原型為 public void pubShowMsg()
/*public static void pubShowMsg() {
System.out.println("this is public ShowMsg()");
}*/
//試圖覆蓋靜態(tài)方法,并將其指定為實例方法,錯誤
/*public void stShowMsg() {
System.out.println("this is static ShowMsg()");
}*/
}
//總結(jié),靜態(tài)與實例之間不能相互轉(zhuǎn)換
以上就是動力節(jié)點Java培訓(xùn)機構(gòu)小編介紹的“java繼承方法規(guī)則或規(guī)律”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)視頻教程推薦
java初級入門教程下載——java中方法覆蓋的規(guī)則:http://www.ilovecolors.com.cn/xiazai/2552.html
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743