问题描述
- 关于多态,求助好心人
- 就是cat extends animal;animal a=new cat();new cat()这个对象的名字只是用animal a称呼了吧?
那为什么不可以a调用猫自己的特有方法呢
解决方案
谁告诉你a是猫了?a没有指明他到底是哪种动物,只有指明a=new Cat();a才表示猫,才有猫的特有方法
解决方案二:
多态——在我写这篇文章之前,我一直认为多态指的是“运行时多态”,就是在基类中借助virtual关键字实现的。
好,看到这里,忘记上面那句话。
- 多态是如何实现绑定的多态的绑定可以分为运行时多态和编译时多态。编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数决定实现何种操作。(有些人写的是根据参数列表和返回值,但返回值在C++中式可以忽略的,因为其......
答案就在这里:关于C++中的多态
解决方案三:
abstract class Animal{
abstract void say();
}
class Cat{
public void eat(){
Systemoutprintln(""喵....."");}
}
Animal a = new Cat( );
创建的这个对象到底是那个类的对象,麻烦给我分析下,刚才复习的时候有些乱,这个是向上引用,指向的是父类,现在调用 a.say(); 调用的是Cat类里面的方法,是向上引用的对吧!
new关键字接的是什么,就是创建的哪个对象。
另外子类对象的实例可以用父类对象变量甚至接口变量来引用
现实中常见的写法
Map map = new HashMap();
List list = new ArrayList();
其中Map 与 List都是接口,HashMap与ArrayList都是实现接口的实现类,Java中允许这样定义。
解决方案四:
abstract class Animal{
abstract void say();
}
class Cat{
public void eat(){
Systemoutprintln(""喵....."");}
}
Animal a = new Cat( );
创建的这个对象到底是那个类的对象,麻烦给我分析下,刚才复习的时候有些乱,这个是向上引用,指向的是父类,现在调用 a.say(); 调用的是Cat类里面的方法,是向上引用的对吧!
new关键字接的是什么,就是创建的哪个对象。
另外子类对象的实例可以用父类对象变量甚至接口变量来引用
现实中常见的写法
Map map = new HashMap();
List list = new ArrayList();
其中Map 与 List都是接口,HashMap与ArrayList都是实现接口的实现类,Java中允许这样定义。
解决方案五:
Animal a = new Cat(); new Cat()这个动作先创建父对象Animal,再跳到Cat的构造函数创建子对象Cat。然后“=”将Cat的引用赋给Animal 的引用a,a才能够调用Cat对象中的方法。java的东西基本都封装了,想更深挖的话建议看看C++的多态机制。
解决方案六:
声明是什么类它就是什么类,声明是animal类它就只有animal类的功能 就像是告诉它,你是动物类,所以它虽然本来是猫,它却不知道自己是猫,当你想让它知道自己是猫,你就强制转换回来:(cat)a;这时它才明白过来自己是猫,就可以用猫的功能了:(cat)a.猫叫();
解决方案七:
我的理解是new cat()是cat的实例他是可以调用cat本身的方法的,但是animal a=new cat()用animal接收了,也就是现在这个cat已不是cat而是animal,
而animal是cat的父类是不可以调用其子类特有的方法的
解决方案八:
我的理解是new cat()是cat的实例他是可以调用cat本身的方法的,但是animal a=new cat()用animal接收了,也就是现在这个cat已不是cat而是animal,
而animal是cat的父类是不可以调用其子类特有的方法的