黑马程序员技术交流社区
标题:
多态中遇到的问题
[打印本页]
作者:
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