您的位置:首页 > 编程语言 > Java开发

Java day06 多态 (类型提升,向下转型)

2016-03-18 23:44 525 查看
/*
多态	基于继承
多态:	父类的引用指向了子类的对象
作用:	提高了扩展性
局限性:仅能根据父类的引用访问父类的成员
*/
//抽取出动物的吃的抽象方法,
abstract class Animal
{
abstract void eat();
}
//对不同动物的吃的行为的封装
class doSth
{
public static void function(Animal a)
{
a.eat();

//当类型少,或者必须确定某对象是什么类型时,用instanceof
if(a instanceof Cat)
{//对象属于某类的实例
Cat c=(Cat)a;//向下转型
c.catchMouse();
}
else if(a instanceof Dog)
{
Dog d=(Dog)a;//向下转型
d.guard();
}
}

}
class Cat extends Animal
{
public void eat()
{
System.out.println("I eat fish");
}
public void catchMouse()
{
System.out.println("抓老鼠");
}
}
class Dog extends Animal
{
public void eat()
{
System.out.println("I eat bones");
}
public void guard()
{
System.out.println("I'm guarding");
}
}

class PolymophismDemo
{
public static void main(String[] args)
{
Animal a=new Cat();//父类的引用指向了子类的对象注意,
//实质是自动类型转换,右侧类型向左侧提升——向上提升
//注意!:仅当在此之后只进行二者共同方法调用才能这么用

//强制类型转换——向下转换
Cat c=(Cat)a;//此句前一定要有Animal a=new Cat();
c.catchMouse();
System.out.println();
//	function(new Dog());//
//	function(new Cat());//

doSth ds=new doSth();
ds.function(new Dog());

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: