更新時間:2019-09-10 16:32:35 來源:動力節點 瀏覽2655次
方法的繼承與屬性的繼承有很大的不同,屬性任何繼承方式均可,而方法則有各種限制,于是動力節點Java培訓機構小編在這里做了一個簡單的總結。
1、修飾符相同的方法覆蓋,即只改內部,不改外部
2、訪問權限不同的方法覆蓋,子類只能相對父類越來越寬松,例如父類是public,子類就不能是缺省或protect,private
3、返回值的類型覆蓋,只允許相容的返回類型,例如不能將返回值為int型改為double型,但是復合類型則例外
4、final的方法覆蓋,只能是父類無,子類有,而不能是父類有,子類無
5、static(靜態)的方法覆蓋不能有任何變動,即父類有,子類必須有,父類無,子類也必須無
實例如下:
父類:
package ExtendMethod;
public class CommonMethod {
protected int x=100;
public int getX() {//定義一個普通返回值的實例方法
return x;
}
public CommonMethod getObject() {//定義一個返回復合類型的方法
return new CommonMethod();
}
public final void setX(int ix) {
x=ix;
}
protected void proShowMsg() {//定義一個具有保護權限的方法
System.out.println("this is protected ShowMsg() in Common class");
}
public void pubShowMsg() {//定義一個具有公共訪問權限的方法
System.out.println("this is public showMsg() in Common class");
}
static public void stShowMsg() {//定義一個靜態方法
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");
}
//覆蓋父類中的同名靜態方法
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();
}
}
二、訪問權限不同的覆蓋,只能越來越寬松,private——>public的方向
public class OverrideMember_2 extends Common{
public void proShowMsg() {//覆蓋父類中的protect方法,public > protect,正確
System.out.println("this is public ShowMsg()");
}
/*protected void pubShowMsg() {//權限越來越嚴格,錯誤,protect < public
System.out.println("this is protect ShowMsg()");
}*/
}
三、返回值類型的覆蓋
public class OverrideMember_3 extends Common {
//覆蓋getX()方法,但返回的數據類型不同,原方法是int型,錯誤
/*public double getX() {
return (double)x;
}*/
//覆蓋getObject(),返回類型相容,正確,原方法的返回類型是新common對象,復合類型
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{
//試圖覆蓋實例方法,將其改為靜態方法,錯誤,原型為 public void pubShowMsg()
/*public static void pubShowMsg() {
System.out.println("this is public ShowMsg()");
}*/
//試圖覆蓋靜態方法,并將其指定為實例方法,錯誤
/*public void stShowMsg() {
System.out.println("this is static ShowMsg()");
}*/
}
//總結,靜態與實例之間不能相互轉換
以上就是動力節點Java培訓機構小編介紹的“java繼承方法規則或規律”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
相關視頻教程推薦
java初級入門教程下載——java中方法覆蓋的規則:http://m.dabaquan.cn/xiazai/2552.html
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習