A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董将 中级黑马   /  2012-12-19 20:01  /  1685 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 董将 于 2012-12-22 19:42 编辑

今天在学习的过程中,遇到很多关于多态的问题,在这个地方有一些疑惑,请求大神指点?
多态的机制是什么?
最好来几个向上转型和向下转型的例子,附上代码最好,再次感谢

5 个回复

倒序浏览
1,多态的体现
        父类的引用指向了自己的子类对象。
        父类的引用也可以接收自己的子类对象。
2,多态的前提
        必须是类与类之间有关系。要么继承,要么实现。
        通常还有一个前提:存在覆盖。

3,多态的好处
        多态的出现大大的提高程序的扩展性。

4,多态的弊端:
        虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。

例子:

abstract class Animal
{
        abstract void eat();

}
class Cat extends Animal
{
        public void eat()
        {
                System.out.println("吃鱼");
        }
        public void catchMouse()
        {
                System.out.println("抓老鼠");
        }
}
class DuoTaiDemo2
{
        public static void main(String[] args)
        {
                Animal a = new Cat();//类型提升。 向上转型。
                a.eat();

                //强制将父类的引用。转成子类类型。向下转型。
                Cat c = (Cat)a;
                c.catchMouse();
                //千万不要出现这样的操作,就是将父类对象转成子类类型。
                //我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换。
                //多态自始至终都是子类对象在做着变化。
                //Animal a = new Animal();
                //Cat c = (Cat)a;
               
}

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
上面的例子是毕老师视频里面的,楼主看看喽
回复 使用道具 举报
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
多态就是父类的引用可以指向子类的对象。
public class polyTest extends demo
{       
public void run()       
{               
System.out.println("Son");       
}     
public static void main(String [] args )          
{      
demo de = new  polyTest();//这一行是关键也就是多态就是父类的引用可以指向子类的对象          
de.run();       
}
}
class demo
{       
public void run()       
{               
System.out.println("Father");       
}
}
回复 使用道具 举报
陈雪平 发表于 2012-12-19 20:08
上面的例子是毕老师视频里面的,楼主看看喽

多谢多谢,我这现在就少多态的代码
回复 使用道具 举报
一个关于多态的代码:
class Animal{//声明一个父类Animal
int weight,height;
//Animal中共有的eat()方法
void eat(){
System.out.println("animal eat");
}
//Animal中共有的sleep()方法
void sleep(){
System.out.println("animal sleep");
}
//Animal中共有的breathe()方法
void breathe(){
System.out.println("animal breathe");
}
}

class Fish extends Animal{
void breathe(){
System.out.println("fish breathe");
}
}

class Test {

static void fn(Animal an){
an.breathe();
}

public static void main(String [] args){
Fish fh=new Fish();
Animal an;
an=fh;
Test.fn(an);


}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马