㈠ java中方法的重載的什麼意思,最好舉個例子
1)方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。
(2)Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。
(3)重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數的區分標准。
下面是重載的例子:
class Cat {
void isCat(){ //isCat()方法是重載方法
System.out.println("this is a cat.");
}
void isCat(String color){ //注意:重載的方法的返回值都是一樣的
System.out.println("this is a "+color+" cat.");
}
void isCat(String color ,String size ){//不能以返回值區分重載方法
size = "big";
System.out.println("this is a "+size+" "+color+" cat.");
}
}
㈡ java中為什麼要用方法重載
要弄清楚為什麼要用方法重載,就必須知道重載和重寫的區別;下面的資料你可以看看:
Java中重載和重寫的區別
首先我們來講講:重載(Overloading)
(1) 方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時
存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。
(2) Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具
有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型
來決定具體使用哪個方法, 這就是多態性。
(3) 重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同
也可以不相同。無法以返回型別作為重載函數的區分標准。
下面是重載的例子:
package c04.answer;//這是包名
//這是這個程序的第一種編程方法,在main方法中先創建一個Dog類實例,然後在Dog類的構造方法中利用this關鍵字調用不同的bark方法。不同的重載方法bark是根據其參數類型的不同而區分的。
//注意:除構造器以外,編譯器禁止在其他任何地方中調用構造器。
package c04.answer;
public class Dog {
Dog()
{
this.bark();
}
void bark()//bark()方法是重載方法
{
System.out.println(「no barking!」);
this.bark(「female」, 3.4);
}
void bark(String m,double l)//注意:重載的方法的返回值都是一樣的,
{
System.out.println(「a barking dog!」);
this.bark(5, 」China」);
}
void bark(int a,String n)//不能以返回值區分重載方法,而只能以「參數類型」和「類名」來區分
{
System.out.println(「a howling dog」);
}
public static void main(String[] args)
{
Dog dog = new Dog();
//dog.bark();
//dog.bark(「male」, 」yellow」);
//dog.bark(5, 」China」);
然後我們再來談談 重寫(Overriding)
(1) 父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某
方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,
子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不
動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又
稱方法覆蓋。
(2) 若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,
則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵
字引用了當前類的父類。
(3) 子類函數的訪問修飾許可權不能少於父類的;
下面是重寫的例子:
概念:即調用對象方法的機制。
動態綁定的內幕:
1、編譯器檢查對象聲明的類型和方法名,從而獲取所有候選方法。試著把上例Base
類的test注釋掉,這時再編譯就無法通過。
2、重載決策:編譯器檢查方法調用的參數類型,從上述候選方法選出唯一的那一個
(其間會有隱含類型轉化)。如果編譯器找到多於一個或者沒找到,此時編譯器就會
報錯。試著把上例Base類的test(byte b)注釋掉,這時運行結果是1 1。
3、若方法類型為priavte static final ,java採用靜態編譯,編譯器會准確知道該調用哪
個方法。
4、當程序運行並且使用動態綁定來調用一個方法時,那麼虛擬機必須調用對象的實
際類型相匹配的方法版本。在例子中,b所指向的實際類型是TestOverriding,所以
b.test(0)調用子類的test。但是,子類並沒有重寫test(byte b),所以b.test((byte)0)調用
的是父類的test(byte b)。如果把父類的(byte b)注釋掉,則通過第二步隱含類型轉化為
int,最終調用的是子類的test(int i)。
學習總結:多態性是面向對象編程的一種特性,和方法無關.
簡單說,就是同樣的一個方法能夠根據輸入數據的不同,做出不同的處理,即方法的重載——有不同的參數列表(靜態多態性)
而當子類繼承自父類的相同方法,輸入數據一樣,但要做出有別於父類的響應時,你
就要覆蓋父類方法,即在子類中重寫該方法——相同參數,不同實現(動態多態性)
OOP三大特性:繼承,多態,封裝。
public class Base
{
void test(int i)
{
System.out.print(i);
}
void test(byte b)
{
System.out.print(b);
}
}
public class TestOverriding extends Base
{
void test(int i)
{
i++;
System.out.println(i);
}
public static void main(String[]agrs)
{
Base b=new TestOverriding();
b.test(0)
b.test((byte)0)
}
}
這時的輸出結果是1 0,這是運行時動態綁定的結果。
㈢ php繼承中方法重載(覆蓋)的應用場合
本文實例分析了php繼承中方法重載(覆蓋)的應用場合。分享給大家供大家參考。具體分析如下:
方法重載(override)/覆蓋——在什麼情況下使用:當父類知道所有的子類都需要用到一個方法,但父類不知道怎麼去寫這個方法時,就需要用到方法的重載。這時候,可以讓子類去重寫,來覆蓋這個方法。
通俗實例——父類(動物)知道其子類(貓和狗)都會叫,但它們的叫法都不一樣,所以父類沒法去寫這個方法,只能讓子類(貓和狗)去定義。代碼如下:
<?php
class
Animal{
public
$name;
protected
$price;
function
cry(){
echo
"不知道動物怎麼叫";
}
}
class
Dog
extends
Animal{
function
cry(){
echo
"汪汪...";
}
}
class
Pig
extends
Animal{
function
cry(){
echo
"哼哼..."
}
}
?>
方法重載/覆蓋的要點與細節(讀起來有點呦口):
1、要求子類的方法,其方法名稱、參數列表與父類方法一模一樣。如例子中cry(),不能添加參數,改成cry($naaa)等。注意:這里並不要求參數名一樣,只是要求參數的個數是一樣的。
2、所謂的重載或覆蓋,並不是將父類的方法覆蓋。也可以這么理解:如果子類有調用該方法時,如果在自己類里找不到這個方法,那麼它會去找父類里,看有沒有這個方法。這也是多態的理解
3、如果子類里某個方法,要把父類里相同名稱方法里的內容繼承下來,可以使用
parent::方法名
或
父類名::方法名
繼承。在子類定義的方法內使用。
4、訪問許可權問題,子類的訪問范圍>=父類的訪問范圍,即如果父類是protected
function
cry(),子類則只能是protected或public。
希望本文所述對大家的php程序設計有所幫助。
㈣ 你可以再舉個例子嗎最好是有重載的完整的程序,講講那用了重載,那個重載時怎麼用出來的,有啥作用。
參數類型上不同的重載函數
#include <iostream.h>
int add(int, int);
double add(double, double);
void main()
{
std::cout<<add(5, 10)<<std::endl;
std::cout<<add(5.0, 10.5)<<std::endl;
}
int add(int x, int y)
{
return x+y;
}
double add(double a, double b)
{
return a+b;
}
該程序中,main()函數中調用相同名字add的兩個函數,前邊一個add()函數對應的是兩個int型數求和的函數實現,而後邊一個add()函數對應的是兩個double型數求和的函數實現。這便是函數的重載。
以上程序輸出結果為:
15
15.5
參數個數上不同的重載函數
#include <iostream>
int min(int a, int b);
int min(int a, int b, int c);
int min(int a, int b, int c, int d);
int main(void)
{
cout<<min(13, 5, 4, 9)<<endl;
cout<<min(-2, 8, 0)<<endl;
}
int min(int a, int b)
{
return a<b?a:b;
}
int min(int a, int b, int c)
{
int t = min(a, b);
return min(t,c);
}
int min(int a, int b, int c, int d)
{
int t1 = min(a, b);
int t2 = min(c, d);
return min(t1, t2);
}
㈤ java重載實例
public class overload{
public void m(int i){
System.out.println(i):
}
public void m(int i,int j){
System.out.println(i+j):
}
}
上面的例子中你可以看到,一個類裡面有兩個名字相同的方法,但是參數數量卻不一樣,這種情況就叫方法的重載。重載不僅僅只涉及參數數量不同,還有別的,你可以查一下
㈥ 什麼叫做方法的重載,高手可以舉個例子嗎
在Java 中,同一個類中的2個或2個以上的方法可以有同一個名字,只要它們的參數聲明不同即可。在這種情況下,該方法就被稱為重載(overloaded),這個過程稱為方法重載(method overloading)。方法重載是Java 實現多態性的一種方式。
舉個簡單的例子
public class A{
public int method (int i){
//方法一,只有一個int類型參數
}
public int method (int i,String s){
//方法一,有一個int類型參數和一個String類型參數
}
public static void main(String args[]){
A a=enw A();
a.method (2);//調用第一個方法
a.method(2,"ssss")//調用第二個方法
}
}
這樣說得夠清楚了,自己理解!
㈦ 請問java中重寫和重載的區別是什麼能不能舉一個重載的例子呢謝謝!
方法重載:就是在同一個類中,方法的名字相同,但參數個數、參數的類型或返回值類型不同!
方法重寫:它是指子類和父類的關系,子類重寫了父類的方法,但方法名、參數類型、參數個數必須相同!
舉個例子:
Test.java
--------------
public class Test
{
public static void main(String[] args){
Test ts = new Test() ;
System.out.println(ts.ss("s1","s2")) ;
System.out.println(ts.ss("s1")) ;
}
public String ss(String s1,String s2){
return s1+s2 ;
}
public String ss(String s1){
return s1 ;
}
}
----------------
其中ss就形成了方法重載.
㈧ 方法重載和重寫的區別有點不懂,麻煩給舉個例子!
重載是方法名一樣,但是參數類型或者個數不一樣,(什麼意思呢,就是方法名字一樣,只是裡面的參數個數或類型不一樣)
如:Method(param A,param B){}
和Method(param A){}就是重載,
重寫是指方法名和參數完全一樣,就裡面的具體實現不同,一般是子類重寫父類的方法