Hi!欢迎光临陕西省的权威思科、华为、Oracle、红帽、深信服、微软认证培训中心!
| 029-88235527
您现在所在位置:首页 > 新闻资讯 > 行业新闻 >

java继承方法规则或规律

发布日期:2019-09-10 16:34:02点击次数:

分享到:
  方法的继承与属性的继承有很大的不同,属性任何继承方式均可,而方法则有各种限制,于是西安鸥鹏Java培训机构小编在这里做了一个简单的总结。
java继承方法规则或规律

  1、修饰符相同的方法覆盖,即只改内部,不改外部

  2、访问权限不同的方法覆盖,子类只能相对父类越来越宽松,例如父类是public,子类就不能是缺省或protect,private

  3、返回值的类型覆盖,只允许相容的返回类型,例如不能将返回值为int型改为double型,但是复合类型则例外

  4、final的方法覆盖,只能是父类无,子类有,而不能是父类有,子类无

  5、static(静态)的方法覆盖不能有任何变动,即父类有,子类必须有,父类无,子类也必须无

  实例如下:

  父类:

  packageExtendMethod;

  publicclassCommonMethod{

  protectedintx=100;

  publicintgetX(){//定义一个普通返回值的实例方法

  returnx;

  }

  publicCommonMethodgetObject(){//定义一个返回复合类型的方法

  returnnewCommonMethod();

  }

  publicfinalvoidsetX(intix){

  x=ix;

  }

  protectedvoidproShowMsg(){//定义一个具有保护权限的方法

  System.out.println("thisisprotectedShowMsg()inCommonclass");

  }

  publicvoidpubShowMsg(){//定义一个具有公共访问权限的方法

  System.out.println("thisispublicshowMsg()inCommonclass");

  }

  staticpublicvoidstShowMsg(){//定义一个静态方法

  System.out.println("thisisstaticshowMsg()inCommonclass");

  }

  }

  一、修饰符相同的可以任意覆盖:

  publicclassOverrideMember_1extendsCommon{

  //覆盖父类中的同名实例方法

  publicvoidpubShowMsg(){

  System.out.println("thisispublicshowMsginderiveclass");

  }

  //覆盖父类中的同名静态方法

  staticpublicvoidstShowMsg(){

  System.out.println("thisisstaticshowMsg()inderiveclass");

  }

  //可以任意覆盖

  publicstaticvoidmain(Stringargs[]){

  OverrideMember_1oa=newOverrideMember_1();

  oa.pubShowMsg();

  oa.proShowMsg();

  }

  }

  二、访问权限不同的覆盖,只能越来越宽松,private——>public的方向

  publicclassOverrideMember_2extendsCommon{

  publicvoidproShowMsg(){//覆盖父类中的protect方法,public>protect,正确

  System.out.println("thisispublicShowMsg()");

  }

  /*protectedvoidpubShowMsg(){//权限越来越严格,错误,protect<public

  System.out.println("thisisprotectShowMsg()");

  }*/

  }

  三、返回值类型的覆盖

  publicclassOverrideMember_3extendsCommon{

  //覆盖getX()方法,但返回的数据类型不同,原方法是int型,错误

  /*publicdoublegetX(){

  return(double)x;

  }*/

  //覆盖getObject(),返回类型相容,正确,原方法的返回类型是新common对象,复合类型

  publicOverrideMember_3getObject(){

  returnnewOverrideMember_3();

  }

  }

  四、final的方法覆盖,只能从无到有,不能从有到无

  publicclassOverrideMember_4extendsCommon{

  //覆盖getX()方法,并将其指定为最终方法,正确,原方法为publicintgetX()

  publicfinalintgetX(){

  returnx;

  }

  //覆盖最终方法,错误,原方法为publicfinalvoidsetX()

  /*publicvoidsetX(intix){

  x=ix;

  }*/

  }

  五、static不能有任何改变

  publicclassOverrideMember_5extendsCommon{

  //试图覆盖实例方法,将其改为静态方法,错误,原型为publicvoidpubShowMsg()

  /*publicstaticvoidpubShowMsg(){

  System.out.println("thisispublicShowMsg()");

  }*/

  //试图覆盖静态方法,并将其指定为实例方法,错误

  /*publicvoidstShowMsg(){

  System.out.println("thisisstaticShowMsg()");

  }*/

  }

  //总结,静态与实例之间不能相互转换