/**
* 作者:kuma
* 版本:v1.0
* */
public class study_8_1
{
public static void main(String[] args)
{
//多态:可以理解为事物存在的多种体现形态
//人:男人,女人
//动物:猫,狗
//一个小猫咪可以叫做动物,也可以叫猫
//猫 x=new 猫();
//动物 x=new 猫();
/*
* 1.多态的体现
* 父类的引用指向了自己的子类对象
* animal c=new cat();
* 父类的引用也可以接受自己的子类对象
*
* 2.多态的前提
* 必须是类与类之间有关系,要么继承,要么实现。
* 通常还有一个前提,几个子类中的功能对父类存在覆盖
* 3.多态的好处
* 多态的出现大大的提高了程序的扩展性
* 4.多态的弊端
* 提高了扩展性,但是只能使用父类的引用访问父类中的成员
* 5.多态的应用
* 6.多态的出现代码中的特点
* */
/*cat c=new cat();
c.eat();
dog d=new dog();
d.eat();*/
animal c=new cat();//类型提升,和byte,int相加一个意思
//向上转型,猫转换成动物
//创建的不是抽象类,抽象类定义变量,创建的是子类对象
c.eat();
//如果想要调用猫的特有方法时,如何操作?(调用上一只定义的旧小猫)
//强制将弗雷德引用转换成子类类型;
cat b=(cat)c;//转换类型,将动物转换成猫,其实转换的是父类的引用
b.catch_mouse();
//千万不要出现这样的操作,就是将父类对象转换成子类对象
//多态自始至终都是子类对象在做着变化
function(new pig());
//毕姥爷 x=new 毕老师();
//x.讲课();
//这跑起来肯定是毕老师讲的java
//但是其他人看的是毕姥爷
//毕老师假装毕姥爷讲课回来了,有人找看电影
//毕老师 y=(毕老师)x;//毕老师把胡子摘了,卸掉伪装
//y.看电影();
//*-------多态从始至终都是子类的变化------
function(new dog());
}
public static void function(animal a)//animal a=new cat()
{
a.eat();
if(a instanceof cat)//如果a是cat类型
{
cat c=(cat)a;
c.catch_mouse();
}
else if(a instanceof dog)
{
dog c=(dog)a;
c.kanJia();
}
}
}
/*
* 需求:
* 动物:猫,狗
* */
abstract class animal
{
abstract void eat();
}
class cat extends animal
{
public void eat()
{
System.out.println("吃鱼");
}
public void catch_mouse()
{
System.out.println("抓老鼠");
}
}
class dog extends animal
{
public void eat()
{
System.out.println("吃骨头");
}
public void kanJia()
{
System.out.println("看家");
}
}
class pig extends animal
{
public void eat()
{
System.out.println("饲料");
}
public void gongdi()
{
System.out.println("拱地");
}
}
多态(一)
最新推荐文章于 2024-02-26 08:18:03 发布