关于多态

eviljordan 2012-12-14 07:18:43
对多态还是理解不够~求透彻解释和举下典型例子 简单和难的都举下
...全文
184 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuanyuan5201314 2012-12-15
  • 打赏
  • 举报
回复
引用 5 楼 eviljordan 的回复:
引用 3 楼 zhaoming262350 的回复:多态:简单的说就是父类型的引用指向子类型的对象。 形式 : Father father = new Son ();但是通过引用类型的变量可以调用的是子类的方法(指向谁调用谁),但是调用子类的方法时,首先要看是不是子类重写了父类的方法;如果子类重写了这个父类的方法,就可以通过父类型的引用子类的方法。 Father fa……
其实你可以看看Java编程思想这本书。
eviljordan 2012-12-15
  • 打赏
  • 举报
回复
引用 13 楼 tiwerbao 的回复:
引用 12 楼 eviljordan 的回复: 是不是在类中,定义了其他类的变量,就可以用其他类里的方法和属性? 是的,可以调用其他类!
3Q
忙碌的松鼠 2012-12-15
  • 打赏
  • 举报
回复
引用 7 楼 tiwerbao 的回复:
引用 5 楼 eviljordan 的回复:向上向下的转型老是不知谁指向谁,搞混了,怎样理解比较好? 其实多态的实现,通常分成两种方式:重载和覆盖 重载,就是方法名相同而参数结构不同,能实现同一个参数名的不同实现。 覆盖,就是子类重写父类的同名同参数结构方法,然后同一个父类引用,使用不同的具体子类,能实现不同的功能。 而父类引用调用子类,这属于比较核心的一块。楼主……
支持这句话,编译看左,运行看右。
Jacky-止涯 2012-12-15
  • 打赏
  • 举报
回复
引用 12 楼 eviljordan 的回复:
是不是在类中,定义了其他类的变量,就可以用其他类里的方法和属性?
是的,可以调用其他类!
Jacky-止涯 2012-12-15
  • 打赏
  • 举报
回复
引用 5 楼 eviljordan 的回复:
向上向下的转型老是不知谁指向谁,搞混了,怎样理解比较好?
其实多态的实现,通常分成两种方式:重载和覆盖 重载,就是方法名相同而参数结构不同,能实现同一个参数名的不同实现。 覆盖,就是子类重写父类的同名同参数结构方法,然后同一个父类引用,使用不同的具体子类,能实现不同的功能。 而父类引用调用子类,这属于比较核心的一块。楼主的疑问:【向上向下的转型老是不知谁指向谁】 简单的举个例子:
Person p = new Son();
之前看过一句很经典的话:编译看左,运行看右! 就是说,Person能调用Son,这是在编译的时候检查的,只要有继承实现关系,都能通过检查; 而运行时,实际上调用的是Son类。(这就是楼主的问题答案,实际调用的都是右边的)
eviljordan 2012-12-15
  • 打赏
  • 举报
回复
引用 10 楼 tiwerbao 的回复:
引用 9 楼 eviljordan 的回复: 谢谢。看到了一些“持有对方的引用” 就是比如子类里 Person p; Son(Person p) { this.p = p; } 这样的,有什么作用? 这个需要结合实际情况分析了! 比如说:有时候有一些层级关系的结构会这么做,例如Person链,那么这个this.p就可以看成是next指针,一层一层传下去! 具体还是得看什么……
是不是在类中,定义了其他类的变量,就可以用其他类里的方法和属性?
eviljordan 2012-12-15
  • 打赏
  • 举报
回复
是不是在类中,定义了其他类的变量,就可以用其他类里的方法和属性?
Jacky-止涯 2012-12-15
  • 打赏
  • 举报
回复
引用 9 楼 eviljordan 的回复:
谢谢。看到了一些“持有对方的引用” 就是比如子类里 Person p; Son(Person p) { this.p = p; } 这样的,有什么作用?
这个需要结合实际情况分析了! 比如说:有时候有一些层级关系的结构会这么做,例如Person链,那么这个this.p就可以看成是next指针,一层一层传下去! 具体还是得看什么场景,才能分析他的企图。
eviljordan 2012-12-15
  • 打赏
  • 举报
回复
引用 7 楼 tiwerbao 的回复:
引用 5 楼 eviljordan 的回复: 向上向下的转型老是不知谁指向谁,搞混了,怎样理解比较好? 其实多态的实现,通常分成两种方式:重载和覆盖 重载,就是方法名相同而参数结构不同,能实现同一个参数名的不同实现。 覆盖,就是子类重写父类的同名同参数结构方法,然后同一个父类引用,使用不同的具体子类,能实现不同的功能。 而父类引用调用子类,这属于比较核心的一块。楼主的疑问:【向上向下的转……
谢谢。看到了一些“持有对方的引用” 就是比如子类里 Person p; Son(Person p) { this.p = p; } 这样的,有什么作用?
eviljordan 2012-12-14
  • 打赏
  • 举报
回复
引用 4 楼 wind_2008_06_29 的回复:
C/C++ code ? 123456789101112131415161718192021222324252627282930 #include <iostream> using namespace std; class IHello{ public: virtual void Hello(); }; class IWorld{ ……
看不懂C++呢亲
eviljordan 2012-12-14
  • 打赏
  • 举报
回复
引用 3 楼 zhaoming262350 的回复:
多态:简单的说就是父类型的引用指向子类型的对象。 形式 : Father father = new Son ();但是通过引用类型的变量可以调用的是子类的方法(指向谁调用谁),但是调用子类的方法时,首先要看是不是子类重写了父类的方法;如果子类重写了这个父类的方法,就可以通过父类型的引用子类的方法。 Father father = new Son();这个过程体现了类型类型的转化; 有向上类型……
谢谢,向上向下的转型老是不知谁指向谁,搞混了,怎样理解比较好?
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;


class	IHello{
public:
	virtual	void	Hello();
};

class	IWorld{
public:
	virtual	void	World();
};

class	HelloWorld:	public	IHello, public	IWorld{};

void	IHello::Hello(){
	cout<<"Hello"<<endl;
}

void	IWorld::World(){
	cout<<"World"<<endl;
}

int main(){
	IHello*	hello	=	new	HelloWorld;
	IWorld*	world	=	(IWorld*)(void*)hello;
	world->World();
}
zhaoming262350 2012-12-14
  • 打赏
  • 举报
回复
多态:简单的说就是父类型的引用指向子类型的对象。 形式 : Father father = new Son ();但是通过引用类型的变量可以调用的是子类的方法(指向谁调用谁),但是调用子类的方法时,首先要看是不是子类重写了父类的方法;如果子类重写了这个父类的方法,就可以通过父类型的引用子类的方法。 Father father = new Son();这个过程体现了类型类型的转化; 有向上类型的转化与向下类型的转化;但是向下类型的转化,必须要强制转化。例如: Father father = new Son(); Son son =(son) father;//强制类型的转化 son.method(); 在向下强制类型转换的过程中,要转换成那个子类的引用,在父类实例化时,父类的引用就要指向这个子类的对象。 如果是:Father father = new father(); Son son = (Son)father; son.method();//如果父类的引用指向 父类的对象,再强制转化时,就会报异常 ClassCastException 多态的简单代码形式: public class Test { public static void main(String [] args) { Father father = new Son(); Son son = (Son) father; son.method(); } } class Father { public void method() { System.out.println("Father"); } } class Son extends Father { public void method() { System.out.println("Son"); } }
zhaoming262350 2012-12-14
  • 打赏
  • 举报
回复
多态就是父类的对象指向子类引用,详细的你可以看这个:http://blog.csdn.net/zhaoming262350/article/details/7905478
fish8245 2012-12-14
  • 打赏
  • 举报
回复
子类对象 赋值给 父类对象 就称为多态!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧