您的位置:首页 > 职场人生

黑马程序员——Java基础-多态

2015-07-24 22:40 459 查看
------- android培训java培训、期待与您交流!
----------

多态
允许不同类的对象对同一消息做出响应,即同一消息可以根据发送对象的不同采用不同的行为方式。例如:定义一个动物进食方法,这个方法可以接收动物对象的调用,猫调用这个方法是吃鱼,狗调用这个方法是啃骨头。
1.多态的体现
     父类的引用指向了自己的子类对象
     父类的引用也可以接收自己的子类对象    
2.多态的前提
     必须是类与类之间有关系,要么继承,要么实现
     通常还有一个前提,存在覆盖
3.多态的好处
     多态的先大大的提高了代码的扩展性
4.多态的弊端
     提高了扩展性,但是只能使用父类的引用访问父类中的成员
 
通过继承实现多态

class Animal
{
void eat()
{
System.out.println("Animal eat");
}
}
class Cat extends Animal
{
void eat()//覆盖父类方法
{
System.out.println("Cat eat");
}
void catchMouse()//特有方法
{
System.out.println("Cat catchMouse");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
Animal a=new Cat();//类型提升,向上转型。(byte b=2,int x=b,b转为int型)
a.eat();
//如果想要调用猫的特有方法时,如何操作?
//强制将父类的引用转成子类类型,向下转型。
Cat c=(Cat)a;//向下转型。
c.catchMouse();
//千万不要出现这样的操作,就是将父类对象转成子类类型。
//我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。
//多态自始至终都是子类对象在做着变化。
//Animal a=new Animal();
//Cat c=(Cat)a;不行,动物不能转成猫
//对象多态的实现自始至终都是子类对象在变化
//Animal a=new Animal();这里的a是自己的对象
//Animal a=new Cat();这里的a是子类的引用
}
}


通过接口实现多态

interface PCI//PCI插槽是连接主板和各种功能卡的接口
{
public void open();
public void close();
}
class MainBoard
{
public void run()
{
System.out.println("MainBoard run");
}
public void usePCI(PCI p)//主板通过PCI插槽来扩充功能
{
if(p!=null)
{
p.open();
p.close();
}
}
}
class NetCard implements PCI
{
public void open()//重写接口方法
{
System.out.println("netcard open");
}
public void close()//重写接口方法
{
System.out.println("netcard close");
}
}
class SoundCard implements PCI
{
public void open()//重写接口方法
{
System.out.println("soundcard open");
}
public void close()//重写接口方法
{
System.out.println("soundcard close");
}
}
class DuoTaiDemo
{
public static void main (String[] args)
{
MainBoard mb=new MainBoard();
mb.run();
mb.usePCI(null);
mb.usePCI(new NetCard());//匿名对象相当于PCI p=new NetCard(),将p传入
mb.usePCI(new SoundCard());//PCI p接收将其实现的子类对象
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 多态