您的位置:首页 > 编程语言 > Java开发

Java中的多态,引用类型的转换

2017-03-09 11:42 316 查看
1.多态分为引用多态和方法多态,见测试类

package com.wangcf;
//父类
public class Animal {
public void eat(){
System.out.println("父类的方法");
}
}


package com.wangcf;
//子类
public class Bridge extends Animal{

public void eat(){
System.out.println("子类鸟重写的方法");
}

public void fly(){
System.out.println("子类鸟独有的可以飞的方法父类中没有");
}
}


package com.wangcf;
//子类
public class Tiger extends Animal{

}


package com.wangcf;
//测试类
public class Test {
public static void main(String[] args) {
//1.引用多态
Animal obj1=new Animal();    //父类的引用可以指向本类的对象
Animal obj2=new Bridge();    //父类的引用可以指向子类的对象
Animal obj3=new Tiger();
Tiger obj4=new Tiger();
//Bridg obj3=new Animal();    子类引用不可以指向父类

//2.方法多态    优先使用子类的方法,若子类没有重写,则使用父类的方法;父类引用不可以调用子类独有的方法
obj1.eat();    //创建父类的本类对象,调用方法时,调用的是本类的方法
obj2.eat();    //若父类指向子类对象,调用方法为子类的重写方法
obj3.eat();    //或者继承方法
obj4.eat();    //若创建子类的本类对象,没有重写父类的方法,则会调用父类的方法
//obj2.fly();    不能通过父类的引用调用子类独有的方法

}
}


2.引用类型的转换

(1)向上转型,小类型转换为大类型,它是隐式的,自动的,不存在隐患

(2)向下转型,大类型转换为小类型,它是强制转换,存在隐患,会参数内存溢出;可以使用instanceof运算符类避免安全性问题

package com.wangcf;
//测试类
public class Test {
public static void main(String[] args) {
Bridge bri=new Bridge();
Animal animal=bri;//向上转型

//Bridge bri2=animal;向下转型,错误需要使用强制转换
Bridge bri1=(Bridge)animal;//强制

//Tiger tig=(Tiger)animal;//虽然编译器没有报错,运行时会错,我们知道animal是Briger转换来的,它不能转换为Tiger
//Tiger tiger=(Tiger)bri;    //Cannot cast from Bridge to Tiger
//使用 instanceof 进行判断
if(animal instanceof Tiger){
Tiger tig1=(Tiger)animal;
}else{
System.out.println("无法进行类型转换");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: