java继承方法规则或规律
?
? ?方法的繼承與屬性的繼承有很大的不同,屬性任何繼承方式均可,而方法則有各種限制,于是動力節點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数组的定义方式有哪几种
- 下一篇: 合格的Java程序员需要提升的能力有哪些