导航:首页 > 源码编译 > 多态编译报错

多态编译报错

发布时间: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

阅读全文

与多态编译报错相关的资料

热点内容
喷油螺杆制冷压缩机 浏览:581
python员工信息登记表 浏览:377
高中美术pdf 浏览:161
java实现排列 浏览:513
javavector的用法 浏览:982
osi实现加密的三层 浏览:233
大众宝来原厂中控如何安装app 浏览:916
linux内核根文件系统 浏览:243
3d的命令面板不见了 浏览:526
武汉理工大学服务器ip地址 浏览:149
亚马逊云服务器登录 浏览:525
安卓手机如何进行文件处理 浏览:71
mysql执行系统命令 浏览:930
php支持curlhttps 浏览:143
新预算法责任 浏览:444
服务器如何处理5万人同时在线 浏览:251
哈夫曼编码数据压缩 浏览:428
锁定服务器是什么意思 浏览:385
场景检测算法 浏览:617
解压手机软件触屏 浏览:352