一、引用数据类型的强制类型转换:
1、存在这样一个问题:目前多态情况下不能访问子类特有的成员。
解决方法:如果需要访问子类特有的成员,那么需要进行类型强制转换.
2、基本数据类型的转换
1)小数据类型——–>大的数据类型 自动类型转换
2)大数据类型——–>小的数据类型 强制类型转换
格式:小数据类型 变量名 = (小数据类型)大数据类型;
3、引用数据类型的转换
1)小数据类型———>大数据类型 自动类型转换。
2)大数据类型———>小数据类型 强制类型转换
4、需求:定义一个函数可以接收任意类型的动物对象,在函数内部要调用到动物特有的方法。
1)代码:
//动物类
abstract class Animal{
String name;
public Animal(String name){
this.name = name;
}
public abstract void run();
}
//老鼠
class Mouse extends Animal{
public Mouse(String name){
super(name);
}
public void run(){
System.out.println(name+"四条腿慢慢的走!");
}
//老鼠特有方法---打洞
public void dig(){
System.out.println("老鼠在打洞..");
}
}
//鱼
class Fish extends Animal{
public Fish(String name){
super(name);
}
public void run(){
System.out.println(name+"摇摇尾巴游啊游 !");
}
//吹泡泡
public void bubble(){
System.out.println(name+"吹泡泡...!");
}
}
class Demo1{
public static void main(String[] args) {
Mouse m = new Mouse("米老鼠");
Fish f = new Fish("草鱼");
print(f);
}
public static void print(Animal a){
//参数等价于Animal a = new Mouse("米老鼠");
if(a instanceof Fish){
Fish f = (Fish)a;
f.bubble();
}else if(a instanceof Mouse){
Mouse m = (Mouse)a;
m.dig();
}
}
}
2)分析:
5、类型转换最常见的异常: java.lang.ClassCastException。 强制类型转换失败。
二、接口关系下的多态:
1、多态: 父类的引用类型变量指向了子类的对象或者是接口类型的引用类型变量指向了接口实现类的对象。
2、实现关系下的多态:
格式:接口 变量 = new 接口实现类的对象。
3、接口实现多态与继承多态的区别:
1)接口的方法全部都是非静态的方法。而非静态的方法,只能通过实例化对象(即只能实例化实现类对象),再来调用方法。而不能接口直接调用。所以接口的多态不存在继承多态的状况(即有时结果为父类的成员、有时为子类的成员)。
2)除了这一点其它的均可参照继承的多态来使用接口实现的多态。