java什么是方法重写的语法规则? java中方法重写具体是什么

java\u4e2d\u91cd\u5199\u65b9\u6cd5\u5e94\u9075\u5faa\u54ea\u4e9b\u89c4\u5219

A\u3001\u91cd\u5199\u89c4\u5219\u4e4b\u4e00\uff1a
\u91cd\u5199\u65b9\u6cd5\u4e0d\u80fd\u6bd4\u88ab\u91cd\u5199\u65b9\u6cd5\u9650\u5236\u6709\u66f4\u4e25\u683c\u7684\u8bbf\u95ee\u7ea7\u522b\u3002
\uff08\u4f46\u662f\u53ef\u4ee5\u66f4\u5e7f\u6cdb\uff0c\u6bd4\u5982\u7236\u7c7b\u65b9\u6cd5\u662f\u5305\u8bbf\u95ee\u6743\u9650\uff0c\u5b50\u7c7b\u7684\u91cd\u5199\u65b9\u6cd5\u662fpublic\u8bbf\u95ee\u6743\u9650\u3002\uff09 B\u3001\u91cd\u5199\u89c4\u5219\u4e4b\u4e8c\uff1a
\u53c2\u6570\u5217\u8868\u5fc5\u987b\u4e0e\u88ab\u91cd\u5199\u65b9\u6cd5\u7684\u76f8\u540c\u3002
\u91cd\u5199\u6709\u4e2a\u5b6a\u751f\u7684\u5f1f\u5f1f\u53eb\u91cd\u8f7d\uff0c\u4e5f\u5c31\u662f\u540e\u9762\u8981\u51fa\u573a\u7684\u3002\u5982\u679c\u5b50\u7c7b\u65b9\u6cd5\u7684\u53c2\u6570\u4e0e\u7236\u7c7b\u5bf9\u5e94\u7684\u65b9\u6cd5\u4e0d\u540c\uff0c\u90a3\u4e48\u5c31\u662f\u4f60\u8ba4\u9519\u4eba\u4e86\uff0c\u90a3\u662f\u91cd\u8f7d\uff0c\u4e0d\u662f\u91cd\u5199\u3002
C\u3001\u91cd\u5199\u89c4\u5219\u4e4b\u4e09\uff1a
\u8fd4\u56de\u7c7b\u578b\u5fc5\u987b\u4e0e\u88ab\u91cd\u5199\u65b9\u6cd5\u7684\u8fd4\u56de\u7c7b\u578b\u76f8\u540c\u3002
D\u3001\u91cd\u5199\u89c4\u5219\u4e4b\u56db\uff1a
\u91cd\u5199\u65b9\u6cd5\u4e0d\u80fd\u629b\u51fa\u65b0\u7684\u5f02\u5e38\u6216\u8005\u6bd4\u88ab\u91cd\u5199\u65b9\u6cd5\u58f0\u660e\u7684\u68c0\u67e5\u5f02\u5e38\u66f4\u5e7f\u7684\u68c0\u67e5\u5f02\u5e38\u3002\u4f46\u662f\u53ef\u4ee5\u629b\u51fa\u66f4\u5c11\uff0c\u66f4\u6709\u9650\u6216\u8005\u4e0d\u629b\u51fa\u5f02\u5e38\u3002
E\u3001\u91cd\u5199\u89c4\u5219\u4e4b\u4e94\uff1a
\u4e0d\u80fd\u91cd\u5199\u88ab\u6807\u8bc6\u4e3afinal\u7684\u65b9\u6cd5\u3002
F\u3001\u91cd\u5199\u89c4\u5219\u4e4b\u516d\uff1a
\u5982\u679c\u4e00\u4e2a\u65b9\u6cd5\u4e0d\u80fd\u88ab\u7ee7\u627f\uff0c\u5219\u4e0d\u80fd\u91cd\u5199\u5b83\u3002

\u65b9\u6cd5\u91cd\u5199\uff0c\u5c31\u662f\u4e00\u4e2a\u7c7b\u7ee7\u7eed\u4e86\u53e6\u4e00\u4e2a\u7c7b\u7684\u65f6\u5019\uff0c\u5bf9\u7236\u7c7b\u7684\u65b9\u6cd5\u91cd\u65b0\u5b9e\u73b0\uff01

\u8fd9\u4e2a\u91cd\u65b0\u5b9e\u73b0\uff0c\u5c31\u662f\u4f7f\u7528\u76f8\u540c\u7684\u65b9\u6cd5\u540d\uff0c\u76f8\u540c\u7684\u53c2\u6570\u5217\u8868\u548c\u8fd4\u56de\u7c7b\u578b\uff0c\u8bbf\u95ee\u63a7\u5236\u7b26\u4f7f\u7528\u548c\u7236\u7c7b\u76f8\u540c\u6216\u8005\u66f4\u5bbd\u3002

\u4e3e\u4f8b\uff1a
class F {
public String m(String s) {
return s;
}
}

class C extends F {
@Override
public String m(String s) {
return s+"extends";
}
}

一、方法的重写。
1、重写只能出现在继承关系之中。当一个类继承它的父类方法时,都有机会重写该父类的方法。一个特例是父类的方法被标识为final。重写的主要优点是能够定义某个子类型特有的行为。

class Animal {
public void
eat(){

System.out.println ("Animal is eating.");

}
}

class Horse extends Animal{

public void eat(){

System.out.println ("Horse is
eating.");
}

}

2、对于从父类继承来的抽象方法,要么在子类用重写的方式设计该方法,要么把子类也标识为抽象的。所以抽象方法可以说是必须要被重写的方法。

3、重写的意义。
重写方法可以实现多态,用父类的引用来操纵子类对象,但是在实际运行中对象将运行其自己特有的方法。

public class Test {
public static
void main (String[] args) {

Animal h = new Horse();

h.eat();

}

}

class Animal {

public void eat(){

System.out.println ("Animal is
eating.");
}

}

class Horse extends
Animal{
public void
eat(){

System.out.println ("Horse is eating.");

}
public void
buck(){
}

}

一个原则是:使用了什么引用,编译器就会只调用引用类所拥有的方法。如果调用子类特有的方法,如上例的h.buck();
编译器会抱怨的。也就是说,编译器只看引用类型,而不是对象类型。

4、重写方法的规则。
若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求!

重写规则之一:重写方法不能比被重写方法限制有更严格的访问级别。
(但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是public访问权限。)
比如:Object类有个toString()方法,开始重写这个方法的时候我们总容易忘记public修饰符,编译器当然不会放过任何教训我们的机会。出错的原因就是:没有加任何访问修饰符的方法具有包访问权限,包访问权限比public当然要严格了,所以编译器会报错的。

重写规则之二:参数列表必须与被重写方法的相同。
重写有个孪生的弟弟叫重载,也就是后面要出场的。如果子类方法的参数与父类对应的方法不同,那么就是你认错人了,那是重载,不是重写。

重写规则之三:返回类型必须与被重写方法的返回类型相同。
父类方法A:void
eat(){} 子类方法B:int eat(){} 两者虽然参数相同,可是返回类型不同,所以不是重写。
父类方法A:int
eat(){} 子类方法B:long eat(){}
返回类型虽然兼容父类,但是不同就是不同,所以不是重写。

重写规则之四:重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。
例:

import java.io.*;
public class Test
{
public static void main (String[]
args) {
Animal h =
new Horse();
try
{

h.eat();

}

catch (Exception e) {

}

}
}

class Animal
{
public void eat() throws
Exception{

System.out.println ("Animal is eating.");

throw new
Exception();
}

}

class Horse extends
Animal{
public void eat() throws
IOException{

System.out.println ("Horse is eating.");

throw new
IOException();
}

}
这个例子中,父类抛出了检查异常Exception,子类抛出的IOException是Exception的子类,也即是比被重写的方法抛出了更有限的异常,这是可以的。如果反过来,父类抛出IOException,子类抛出更为宽泛的Exception,那么不会通过编译的。
注意:这种限制只是针对检查异常,至于运行时异常RuntimeException及其子类不再这个限制之中。

重写规则之五:不能重写被标识为final的方法。

重写规则之六:如果一个方法不能被继承,则不能重写它。
比较典型的就是父类的private方法。下例会产生一个有趣的现象。

public class Test {
public static
void main (String[] args) {

//Animal h = new Horse();

Horse h = new
Horse();

h.eat();
}

}

class Animal {

private void eat(){

System.out.println ("Animal is
eating.");
}

}

class Horse extends
Animal{
public void
eat(){

System.out.println ("Horse is eating.");

}

}
这段代码是能通过编译的。表面上看来违反了第六条规则,但实际上那是一点巧合。Animal类的eat()方法不能被继承,因此Horse类中的eat()方法是一个全新的方法,不是重写也不是重载,只是一个只属于Horse类的全新的方法!这点让很多人迷惑了,但是也不是那么难以理解。
main()方法如果是这样:

Animal h = new Horse();
//Horse h = new
Horse();

h.eat();
编译器会报错,为什么呢?Horse类的eat()方法是public的啊!应该可以调用啊!请牢记,多态只看父类引用的方法,而不看子类对象的方法!

/**
* 动物类
* @author tanqiao
*
*/
public class Animal {
public String eat() throws RuntimeException{//抛出运行时异常,修饰为public,无参数
return "食物";
}
}

public class Cat extends Animal{
@Override
public String eat() {
//这就是方法重写了,发生在继承关系中,必须满足与父类的该方法返回值类型,方法名和参数列表一致,而且访问不能比父类更严格,抛出的异常不能比父类更大(throws Exception就会报错)
return "吃鱼";
}

/**
* 重载,就是你说的复写吧
* @param s 带有了参数,修改了访问修饰,修改了返回值
* @return 结论:只要满足名字一样就是重载,与其他的无关
*/
void eat(String s) {//同一个类中

}
}

java方法的重写 是发生在继承关系里头的,
比如 子类继承父类;
那么它有如下规则:
规则1: 子类的方法的名称及参数必须和父类方法的名称相同

规则2: 子类的方法的返回值类型必须和父类方法的返回值类型相同

规则3: 子类方法的访问权限不能小于父类方法的访问权限;例如:父类的访问权限是protected, 子类不能是private;只能是同级(protected)或者更高级(public)

规则4: 子类方法抛出的异常个数与父类方法的异常个数一致,且子类异常要比父类异常要小;例如:父类异常为Exception ,子类不能是classNotFoundException

java方法重写语法法则:
A、重写规则之一:
重写方法不能比被重写方法限制有更严格的访问级别。
(但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是public访问权限。) B、重写规则之二:
参数列表必须与被重写方法的相同。
重写有个孪生的弟弟叫重载,也就是后面要出场的。如果子类方法的参数与父类对应的方法不同,那么就是你认错人了,那是重载,不是重写。
C、重写规则之三:
返回类型必须与被重写方法的返回类型相同。
D、重写规则之四:
重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。
E、重写规则之五:
不能重写被标识为final的方法。
F、重写规则之六:
如果一个方法不能被继承,则不能重写它。

  • Java涓,鏂规硶閲嶈浇鍜鏂规硶閲嶅啓鍚勬湁浠涔瑕佹眰,鏈変粈涔堝尯鍒?
    绛旓細绛旓細鏂规硶鐨勯噸鍐Overriding鍜岄噸杞絆verloading鏄Java澶氭佹х殑涓嶅悓琛ㄧ幇銆傞噸鍐橭verriding鏄埗绫讳笌瀛愮被涔嬮棿澶氭佹х殑涓绉嶈〃鐜帮紝閲 杞絆verloading鏄竴涓被涓鎬佹х殑涓绉嶈〃鐜般傚鏋滃湪瀛愮被涓畾涔夋煇鏂规硶涓庡叾鐖剁被鏈夌浉鍚岀殑鍚嶇О鍜屽弬鏁帮紝鎴戜滑璇磋鏂规硶琚噸鍐 (Overriding)銆傚瓙绫荤殑瀵硅薄浣跨敤杩欎釜鏂规硶鏃讹紝灏嗚皟鐢ㄥ瓙绫讳腑鐨...
  • java涓 鍏充簬鏂规硶鐨勮鐩 閲嶈浇 閲嶅啓
    绛旓細瑕嗙洊鍙鍙噸鍐锛屽洜姝ら噸鍐欏拰瑕嗙洊鏄竴涓蹇点傚畠鏄鐩浜嗕竴涓柟娉曞苟涓斿鍏堕噸鍐欙紝浠ユ眰杈惧埌涓嶅悓鐨勪綔鐢ㄣ傚舰寮忔湁锛氬鎺ュ彛鏂规硶鐨瀹炵幇锛屽湪缁ф壙涓篃鍙兘浼氬湪瀛愮被瑕嗙洊鐖剁被涓殑鏂规硶銆傞噸杞斤細瀹冩槸鎸囨垜浠彲浠ュ畾涔変竴浜涘悕绉扮浉鍚岀殑鏂规硶锛岄氳繃瀹氫箟涓嶅悓鐨勮緭鍏ュ弬鏁版潵鍖哄垎杩欎簺鏂规硶锛岀劧鍚庡啀璋冪敤鏃讹紝VM灏变細鏍规嵁涓嶅悓鐨勫弬鏁版牱寮忥紝鏉...
  • java涓鐩鍜岄噸瀹氫箟鐨勫尯鍒
    绛旓細濡傛灉鍦ㄥ瓙绫讳腑瀹氫箟鏌愭柟娉 涓庡叾鐖剁被鏈夌浉鍚岀殑鍚嶇О鍜屽弬鏁帮紝鎴戜滑璇磋鏂规硶琚噸鍐 (Overriding)銆傚湪Java涓锛屽瓙绫诲彲缁ф壙鐖剁被涓殑鏂规硶锛岃屼笉闇瑕侀噸鏂扮紪鍐欑浉鍚岀殑鏂规硶銆備絾鏈夋椂瀛愮被骞朵笉鎯冲師灏佷笉鍔ㄥ湴缁ф壙鐖剁被鐨勬柟娉曪紝鑰屾槸鎯充綔涓瀹氱殑淇敼锛岃繖灏遍渶瑕侀噰鐢鏂规硶鐨閲嶅啓銆鏂规硶閲嶅啓鍙堢О鏂规硶瑕嗙洊銆2銆 鑻ュ瓙绫讳腑鐨勬柟娉曚笌鐖剁被...
  • JAVA璇█涓噸杞藉拰閲嶅啓鐨鍖哄埆
    绛旓細1. 閲嶈浇鏄竴涓被涓湁澶氫釜鍚屽悕鐨勬柟娉曪紝浣嗗弬鏁颁釜鏁板拰鍙傛暟绫诲瀷褰兼涓嶅悓銆鏂规硶鐨閲嶈浇鍙互鐢辨湰绫诲畬鎴愪篃鍙互鐢卞瓙绫诲畬鎴愩傝皟鐢ㄩ噸杞芥柟娉曟槸閫氳繃鍙傛暟绫诲瀷鍜屾暟閲忔潵鍒ゆ柇搴旇璋冪敤鍝釜鏂规硶銆2.閲嶅啓鏄负浜嗗疄鐜扮埗绫诲拰瀛愮被鐩存帴鐨勫鎬併 閲嶅啓鏄寚鍦ㄥ瓙绫讳腑澹版槑涓庣埗绫诲悓鍚嶇殑鏂规硶锛屼絾鏂规硶浣撲笌鐖剁被涓嶅悓銆
  • java涓噸鍐鍜岄噸鏋勪簩鑰呯殑瀹氫箟鍜屽尯鍒?
    绛旓細澶氭佲濄傝澶氭椂鍊檍ava浠g爜鐨勯噸鏋勭‘瀹炲埄鐢ㄤ簡java鐨勬柟娉曢噸鍐鏈哄埗锛屼絾鏄綘瑕佺悊瑙e畠浠牴鏈笉鏄悓涓灞傛涓婄殑涓滆タ銆 閲嶆瀯锛氱珯鍦ㄨ蒋浠舵暣浣撹璁℃濇兂鐨勯珮搴︼紝鏀瑰彉杞欢鍐呴儴缁撴瀯杈惧埌鎻愰珮鏁堢巼锛屽鍔犲姛鑳斤紝鍘婚櫎bug绛夊伐浣溿傛柟娉曢噸鍐欙細浠呬粎鏄痡ava鐨勪竴绉嶈瑷鏈哄埗锛屽畠鍜岀户鎵匡紝瓒呯被鍙互寮曠敤瀛愮被绛夋満鍒朵竴鍚屽疄鐜扳滃鎬佲濄
  • JAVA鍦浠涔鎯呭喌涓嬮渶瑕鏂规硶閲嶅啓
    绛旓細锛堝鏋滄娊璞$被涓殑鏂规硶鍜孫bject涓殑鏂规硶涓鏍蜂緥澶栵級3.缁ф壙浜嗕竴涓埗绫伙紝褰撶埗绫荤殑鏂规硶鏃犳硶婊¤冻瀛愮被闇瑕佹椂锛岄噸鍐欎粠鐖剁被缁ф壙杩囨潵鐨鏂规硶 閲嶅啓鏂规硶锛氭柟娉曞悕蹇呴』涓鑷达紝鑰屼笖蹇呴』淇濊瘉淇濊瘉鍙傛暟绫诲瀷锛屽弬鏁颁釜鏁板拰杩斿洖绫诲瀷涓鏍 褰撶劧杩斿洖绫诲瀷鏄璞$被鍨嬫椂锛閲嶅啓鏂规硶杩斿洖绫诲瀷鍙互鏄璞$殑瀛愮被绫诲瀷 閲嶅啓鐨鏂规硶璁块棶鏉冮檺涓嶈兘鏇...
  • java閲岄潰鐨 toString()鏂规硶閲嶅啓鏄庝箞鍥炰簨鍟?
    绛旓細string鏄竴涓璞★紝浣嗕篃鍙互鐢ㄥ熀鏈被鍨嬪垱寤虹殑鏂瑰紡鏉ュ垱寤猴紝渚嬪:String s="abababababa";// 鍩烘湰绫诲瀷鍒涘缓鐨勬柟寮 String s= new String("asdsad");//瀵硅薄 java閲岋紝鎵鏈夌殑绫伙紝涓嶇鏄痡ava搴撻噷闈㈢殑绫伙紝鎴栬呮槸浣犺嚜宸卞垱寤虹殑绫伙紝鍏ㄩ儴鏄粠object杩欎釜绫荤户鎵跨殑銆俹bject閲屾湁涓涓鏂规硶灏辨槸toString(),閭d箞鍏跺疄...
  • 涓嬮潰鍏充簬java鏂规硶鐨勯噸鍐鎬庝箞鐞嗚В鍛
    绛旓細涓嶅彲浠ワ紝java涓柟娉鐨勬柟娉曠殑閲嶈浇鏄彧鏈夊綋鏂规硶鐨勫弬鏁扮被鍨嬩笉鍚屾垨鍙傛暟涓暟涓嶅悓鏃舵墠鎴愮珛锛屽悓鏃朵笌杩斿洖鍊肩被鍨嬫棤鍏炽傛澶栦綘鎵璇寸殑閲嶅啓璨屼技涓嶅鍝︼紒鍥犱负閲嶅啓鏄瓙绫诲鐖剁被涓悓涓鏂规硶瑕嗙洊锛屽叾鍜岄噸杞芥槸涓嶅悓鐨勫摝
  • Java涓閲嶈浇鍜閲嶅啓鐨鍖哄埆
    绛旓細鏂规硶涓庡叾鐖剁被鏈夌浉鍚岀殑鍚嶇О鍜屽弬鏁帮紝鎴戜滑璇磋鏂规硶琚噸鍐 (Overriding)銆傚湪Java涓锛屽瓙绫诲彲缁ф壙鐖剁被涓殑鏂规硶锛岃屼笉闇瑕侀噸鏂扮紪鍐欑浉鍚岀殑鏂规硶銆備絾鏈夋椂瀛愮被骞朵笉鎯冲師灏佷笉 鍔ㄥ湴缁ф壙鐖剁被鐨勬柟娉曪紝鑰屾槸鎯充綔涓瀹氱殑淇敼锛岃繖灏遍渶瑕侀噰鐢鏂规硶鐨閲嶅啓銆鏂规硶閲嶅啓鍙 绉鏂规硶瑕嗙洊銆傦紙2锛夎嫢瀛愮被涓殑鏂规硶涓庣埗绫讳腑鐨勬煇涓鏂规硶鍏锋湁...
  • java涓柟娉鐨勯噸杞界殑浠涔鎰忔,鏈濂戒妇涓緥瀛
    绛旓細閲嶅啓灏鏄鐩鐖剁被鐨勬柟娉曪紝鍜岀埗绫绘湁鐩稿悓杩斿洖绫诲瀷锛屽弬鏁帮紝鐢氳嚦鏄姏鍑虹殑寮傚父锛閲嶅啓鏂规硶涓嶈兘涓簆rivate锛岃繍鐢ㄤ腑鏈鍏稿瀷鐨勫氨鏄鎺ュ彛鏂规硶鐨勮鐩銆鏂规硶鐨勯噸鍐Overriding鍜岄噸杞絆verloading鏄Java澶氭佹х殑涓嶅悓琛ㄧ幇.閲嶅啓Overriding鏄埗绫诲拰瀛愮被涔嬮棿澶氭佹х殑涓绉嶈〃鐜;濡傛灉鍦ㄥ瓙绫讳腑瀹氫箟鏌愭柟娉曞拰鍏剁埗绫绘湁鐩稿悓鐨勫悕绉板拰鍙傛暟...
  • 扩展阅读:javascript入门 ... java基本语法大全 ... java入门基础笔记整理 ... java基础语法菜鸟教程 ... java重写和重载的区别 ... java ... java语法规则是指什么 ... java当中的基本语法 ... 什么是方法重写有什么规则 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网