Java 多态
日期: 2014-05-14 分类: 跨站数据 254次阅读
多态:父类的引用可以指向子类型的对象。
例如:animal是父类Animal类引用,它指向了子类Bird的对象
Animal aniaml = new Bird();
多态中方法调用的规律:当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,就会报编译错误;如果父类中有该方法,则再去调用子类中该同名的方法。
如果想调用子类中有而父类中没有的方法,需要进行强制类型转换。因为当父类的引用指向子类的对象,用父类引用调用方法时,找不到父类中不存在的方法,这时需要进行向下类型转换,将父类引用转换为子类引用。
下面通过一个demo来展示:
class Animal {
public void run() {
System.out.println("Animal is runing!");
}
}
class Dog extends Animal {
@Override
public void run() {
System.out.println("Dog is runing!");
}
}
class Bird extends Animal {
@Override
public void run() {
System.out.println("Bird is runing!");
}
public void fly(){
System.out.println("Bird is flying!");
}
}
/****************测试类*********************/
public class PolyTest1 {
public static void main(String[] args) {
/*向上类型转换(子类对象赋给父类对象),不需要强转,很符合现实环境,鸟是动物很正常!*/
Bird Bird = new Bird();
Animal animal = Bird;
/*输出"Bird is runing!"【首先判断出父类中有run()方法,然后再调用子类中同名的方法得到的输出结果】*/
animal.run();
/*向下转换(父类对象赋给子类对象),需要强转,这个也符合现实环境,动物不一定是鸟,所以要强转为鸟的类型*/
Animal animal1 = new Bird();
Bird c = (Bird) animal1;
/*输出"Bird is runing!"*/
c.run();
/*输出"Bird is flying!"*/
c.fly();
Animal a = new Bird();
/*编译错误,用父类的引用调用父类不存在的方法而发生错误【Bird中虽然有fly()方法,但是Animal中没有,a是Animal的引用,所以找不到该方法】*/
//a.fly();
Animal a2 = new Bird();
/*向下转换也是有条件的:父类星的引用必须指向子类的对象【Animal的引用a2指向的是Bird类的对象,现在要转换为Dog,可能吗?】*/
//Bird c2 = (Dog) a2;
}
}
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
上一篇: c++ 判断字符串只包含字母、数字、汉字
下一篇: C++之继承与多态
精华推荐