A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 心的方向 中级黑马   /  2013-11-23 17:29  /  1500 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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();
    }
}

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
赞一个,很详细,有实例{:soso_e113:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马