黑马程序员技术交流社区
标题:
java中实现多态的机制
[打印本页]
作者:
罗力
时间:
2012-11-1 21:50
标题:
java中实现多态的机制
关于
java
中实现多态的机制是什么?
作者:
樊鹏飞
时间:
2012-11-1 21:54
本帖最后由 樊鹏飞 于 2012-11-1 22:18 编辑
多态存在于在继承关系中 父类的引用指向子类对象 子类重写父类方法
public class Test {
public static void main(String[] args) {
//多态
Animal a = new Dog();
a.eat(); //其实是调用了dog类中的eat方法
a.sleep(); //其实是调用了dog类中的sleep方法
System.out.println(a.number); //显示的属性仍旧是父类的
}
}
//父类 动物
class Animal {
int number = 10;
public void eat() {
System.out.println("eat");
}
public void sleep() {
System.out.println("sleep");
}
}
//子类 狗
class Dog extends Animal {
int number =20;
@Override
public void eat() {
System.out.println("狗吃肉");
}
@Override
public void sleep() {
System.out.println("狗睁着眼睡");
}
//狗自己的方法
public void play() {
System.out.println("狗玩飞碟");
}
}
复制代码
作者:
奋斗的青春
时间:
2012-11-1 21:55
本帖最后由 吴愿涛 于 2012-11-1 21:57 编辑
静态的多态:方法名相同,参数个数或类型不相同。(overloading)
动态的多态:子类覆盖父类的方法,将子类的实例传与父类的引用调用的是子类的方法
实现接口的实例传与接口的引用调用的实现类的方法。
希望楼主通过以下代码可以看明白:
Collection<Integer> list = new ArrayList<Integer>();
Collection<Integer> set = new HashSet<Integer>();
for(int i=0;i<5;i++){
list.add(i);
list.add(i);
set.add(i);
set.add(i);
}
System.out.println("list的大小为:"+list.size());
for(Integer i: list){
System.out.println(i);
}
System.out.println("set的大小为:"+set.size());
for(Integer i: set){
System.out.println(i);
}
同样是Collection的实现类,同样调用add(Object o)方法,但是最终的表现却不同
list中被添加了10个元素,而set中只有5个元素
以上的表现就是多态,原因:
二者虽然都属于java.util.Collection接口的实现类
但是list所对应的是一个ArrayList,它可以添加重复元素
而set所对应的是一个HashSet,它无法添加重复元素
作者:
梁胜海
时间:
2012-11-2 00:00
你自己去博客看看,我对多态有详细的解答,保证你的疑惑都能解决。http://blog.csdn.net/lsh609912726/article/details/8134729。多态不是一两句话就能说清的,但记住一句话父类型的引用指向了子类型的对象。
作者:
高境
时间:
2012-12-18 10:17
要多多学习。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2