黑马程序员技术交流社区

标题: 多态中遇到的问题 [打印本页]

作者: yan    时间: 2013-8-6 10:37
标题: 多态中遇到的问题
abstract class Animal
{   String name;
        abstract void eat(String name,String food);
}
/*class Eat
{
        public static void starteat(Animal a,String name,String food)
                {
         a.eat(name,food);}*/
class Dog extends Animal
{
        public void eat(String name,String food)
                {
                System.out.println(name+"吃骨"+food);
        }
        public void lookHome()
                {
                System.out.println(name+"看家");
        }
}
class Pig extends Animal
{
        public void eat(String name,String food)
                {
                System.out.println(name+"吃"+food);
        }
        public void GongDi()
                {
                System.out.println(name+"在拱地");
        }
}
class DuoTaiDemo2
{
        public static void main(String[] args)
        {
               
                Animal a=new Pig();
                a.name="哼哼";
               Eat.strateat(a,a.name,"草");
                //EAT.eatt(a,a.name,"草");
               
        }
}
我如果把注释的语句改为class EAT
class{
        public static void eatt(Animal a,String name,String food)
                {
                if(a instanceof Animal)
                        {
                        a.eat(name,food);
                }
        }
}
请问这两者最大的区别在哪里 ,哪个程序更优化呢
作者: wang100753    时间: 2013-8-6 11:18
多态分两种:
(1) 编译时多态:编译时动态重载;
(2) 运行时多态:指一个对象可以具有多个类型,方法的覆盖
    这样对于对象而言分为:
    理解运行时多态:
    Car c = new Bus();
    Car编译时类型 编译时检查变量类型是否存在,是否有调用的方法。
    Bus运行时类型  实际运行是访问heap中的对象,调用实际的方法。
    运行时多态是由运行时类型决定的
    编译时多态是由编译时类型决定的





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2