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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yan 中级黑马   /  2013-8-6 10:37  /  1181 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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);
                }
        }
}
请问这两者最大的区别在哪里 ,哪个程序更优化呢

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

1 个回复

倒序浏览
多态分两种:
(1) 编译时多态:编译时动态重载;
(2) 运行时多态:指一个对象可以具有多个类型,方法的覆盖
    这样对于对象而言分为:
    理解运行时多态:
    Car c = new Bus();
    Car编译时类型 编译时检查变量类型是否存在,是否有调用的方法。
    Bus运行时类型  实际运行是访问heap中的对象,调用实际的方法。
    运行时多态是由运行时类型决定的
    编译时多态是由编译时类型决定的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马