黑马程序员技术交流社区

标题: 面向对象的三大特征:多态. [打印本页]

作者: 心的方向    时间: 2013-11-23 17:29
标题: 面向对象的三大特征:多态.
3.多态
    多态(Polymorphism):是指具有表现多种形态的能力特征.更专业的说法是:同一个实现接口,使用不同的实例而执行不同的操作.
    多态的三个条件:
1.    继承的存在(继承是多态的基础,没有继承就没有多态).
2.    子类重写父类的方法(多态下调用子类重写的方法).
3.    父类引用变量指向子类对象(子类到父类的类型转换).
    子类转换成父类时的规则:
Ø       将一个父类的引用指向一个子类的对象,称为向上转型(upcastiog),自动进行类型转换.
Ø       此时通过父类引用调用的方法是子类覆盖或继承父类的方法,不是父类的方法.
Ø       此时通过父类引用变量无法调用子类特有的方法.
如果父类要调用子类的特有方法就得将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,此时必须进行强制类型转换.
练习:
public class Person //人类
{
    String name;
    int age;
   
    public void eat()
    {
        System.out.println("人们在吃饭!");
    }
}
class Chinese extends Person
{
    //重写父类方法
    public void eat()
    {
        System.out.println("中国人在吃饭!");
    }
   
    //子类特有方法,当父类引用指向子类对象时无法调用该方法
    public voidshadowBoxing()
    {
        System.out.println("练习太极拳!");
    }
}
class English extends Person
{
    //重写父类方法
    public void eat()
    {
        System.out.println("英国人在吃饭!");
    }
}
//测试类
class TestEat
{
    public static voidmain(String[] args)
    {
        TestEat test= newTestEat();
        
        //引用指向中国人,创建中国人类对象
        Personperson1 = new Chinese();
        
        //此时调用的是Chinese的eat()方法
        test.showEat(person1);
        
        Personperson2 = new English();
        
        //此时调用的是English的eat()方法
        test.showEat(person2);
        //强制类型转换(向下转型)
        Chinesechinese = (Chinese)person1;
        
        //向下转型后,调用子类的特有方法
        chinese.shadowBoxing();
        
    }
   
    //使用父类作为方法的形参,实现多态
    public voidshowEat(Person person)
    {
        //传入的是哪具对象就调用哪个对象的eat()方法
        person.eat();
    }
}


作者: 许庭洲    时间: 2013-11-25 20:52
值得学习ing!
作者: 李文帅    时间: 2013-11-26 14:34
赞一个,很详细,有实例{:soso_e113:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2