導航:首頁 > 源碼編譯 > 多態編譯報錯

多態編譯報錯

發布時間:2022-07-04 15:18:17

java多態問題。

其實多態很簡單的,不要把它理解的過難。
每個Java程序的引用變數(你這個裡面引用變數就是a),都有編譯類型和運行類型。編譯就是將 .java文件編譯成 .class文件,而運行就是 .class文件在操作系統上運行。
那麼,這個時候,就出現多態了,一個類,他在編譯時期和運行時期相同的動作卻出現了不同的結果。Animal a = new Cat(); 如你的這個,a在編譯的時候,只能調用Animal裡面的方法和屬性,而不能調用Cat的方法和屬性。
要注意的是,這樣寫Animal a = new Cat(); 後面的Cat必須繼承Animal類,為了出現多態,Cat類中必須重寫Animal的方法。所謂重寫,就是要有和父類Animal中有一模一樣的方法。
編譯的時候,a調用的是自己的方法,我們可以預測結果,但是運行的時候,卻出現了不同的結果,因為他這個時候調用的是Cat的方法,這就是多態。
多態呢,很簡單,面向對象嗎,動物是總類,他又自己特定方法,繼承與他的其他動物也有這個特定方法,但是他們方法結果不一樣的。
多態,也僅僅是指類的方法,與屬性沒有任何關系。
Animal a = new Cat(); a這個引用變數指向了Cat這個對象。
優點是:統一化

❷ Java程序如圖,多態,為什麼編譯不通過f.function這里為什麼不能

子類可以調用父類不受保護的方法,但是當子類轉換成父類時候,父類不能調用子類的方法。類型轉換,這種轉換在java中是自動實現的

❸ java 多態,變數不能被重寫,為什麼

多態中的方法是可以重寫的,但是變數不能重寫,你運行一下這個看看結果就知道了,父類聲明,子類實例化,用這個對象去調方法是子類的方法,但是去調屬性,就是父類的了。

public class A {

public String a="a";

public void A(){
System.out.println("我是A類中的A方法");
}
}

public class B extends A {

public String a="b";
public void A(){
System.out.println("我是B類中的A方法");
}
public static void main(String[] args) {

A b = new B();
b.A();
System.out.println(b.a);
}
}

結果:
我是B類中的A方法
a

❹ java習題,多態的用法,這段代碼無法輸出結果,誰能幫我找出錯誤!

你的 Test 類應該這樣寫:

publicclassTest{

publicstaticvoidmain(String[]args){
//Operationop=newOperation(10.0,20.0);
Operationo;
o=newOpeartionAdd(10.0,20.0);
o.getResult();
o=newOpeartionCha(10.0,20.0);
o.getResult();
}
}

你的OpeartionCha類中的getResult 方法如果是希望它是覆蓋父類的 getResult 方法的話,那麼OpeartionCha類中的getResult 方法和父類的 getResult 方法應該參數聲明是一致的,即OpeartionCha類中的getResult 方法 也應該是無參的才對。所以OpeartionCha類 應該是這樣:

{

publicOpeartionCha(){
}

publicOpeartionCha(doublenum1,doublenum2){
super(num1,num2);
}

@Override
publicvoidgetResult(){
doublecha=(super.getNum1()-super.getNum2());
System.out.println(cha);
}
}

建議寫代碼的時候如果是覆寫方法,把 @Override 加上,這樣如果覆寫有誤,編譯階段就可以給出提醒。

❺ C++中,我的多態,為什麼不成功呢編譯運行後選哪個結果都是一樣的~

因為你的Mammal類裡面speak函數定義的是非const的,而繼承類中是const的,這樣多態機制是無法識別的,把speak後面也加上const就可以了

❻ C++多態的一個練習,基類是CAccount,CSavings,CChecking分別為子類,編譯老是提示:error C2143:

你的想法是沒有問題的,將Withdrawal()函數作為虛函數,然後派生類里實現,在實際調用時會根據實際類型調用相應函數實現,我在自己機器上簡單的把你的程序模擬了一遍是沒有問題的,你看看是不是其他函數的問題。
class CAccount
{
public:
CAccount(){}
~CAccount(){}
virtual void Withdrawal()=0; //取款
};

class CSavings:public CAccount
{
public:
CSavings(){}
~CSavings(){}
void Withdrawal();
};

class CChecking:public CAccount
{
public:
CChecking(){}
~CChecking(){}
void Withdrawal();
};

void CSavings::Withdrawal()
{
cout << "CSavings Withdrawal" << endl;
}

void CChecking::Withdrawal()
{
cout << "CChecking Withdrawal" << endl;
}

void fn(CAccount* account)
{
account->Withdrawal();
}

int main()
{
CSavings saving;
CChecking cheching;

fn(&saving);
fn(&cheching);

return 1;
}

輸出是:
CSavings Withdrawal
CChecking Withdrawal

閱讀全文

與多態編譯報錯相關的資料

熱點內容
cd4017單片機怎麼用 瀏覽:261
鳥哥pdf 瀏覽:240
忘記加密的密碼了怎麼辦 瀏覽:556
好友信息提示音在哪個文件夾 瀏覽:274
怎麼讓雲伺服器轉發本地埠 瀏覽:42
python數組剔除元素 瀏覽:13
推薦一款解壓的手機游戲 瀏覽:43
jsphp時間戳轉換日期 瀏覽:419
明日之後如何刪掉賬號伺服器 瀏覽:72
syjsks是什麼伺服器 瀏覽:606
中控軟體加密狗授權後變空白的 瀏覽:675
androidphp登陸 瀏覽:192
cad中tr命令修剪不了 瀏覽:266
夾東西的文件夾怎麼拆 瀏覽:919
如何停止和啟動MYSQL伺服器 瀏覽:137
二叉樹演算法求值 瀏覽:456
小米手機怎麼用華為雲伺服器地址 瀏覽:491
樂清程序員 瀏覽:423
fetchrowphp 瀏覽:522
灰色的c語言編譯器 瀏覽:18