多态中的转型问题
程序示例
/*
多态的弊端:
多态无法使用子类特有的方法
我就想使用子类特有的功能,能否使用?
答案是能
那怎么使用呢?
1、创建对应的子类对象并调用方法
可以,但是不推荐,很多时候会占用栈内存和堆内存的空间
2、java替我们考虑到了这一点,提供了一个技术给我们使用:向下转型
把父类的引用强制转换成子类的引用
格式:子类类名 变量名 = (子类类名)父类的引用
对象之间转型的问题:
1、向上转型
其实就是多态创建对象的写法
Fu f = new Son();//父类的引用指向子类的对象
2、向下转型
Son s = (Son)f;//将父类的引用强转成子类的引用并接收
基本数据类型之间的强转:
int a = 10;
byte b = (byte)a;
向下转型的注意事项:
要求必须是存在继承关系的
*/
class Father2{
public void fun(){
System.out.println("这是父类中的fun方法");
}
}
class Son2 extends Father2{
//对父类fun()方法的重写
public void fun(){
System.out.println("这是子类中的fun方法");
}
//子类中特有的方法
public void show(){
System.out.println("这是子类中特有的show方法");
}
}
class Demo{
}
public class PolymorphicDemo2 {
public static void main(String[] args) {
//使用子类特有的show()方法可以通过创建子类对象去访问,但是我这里说的是多态,这种情况就不考虑了。
// Son2 son2 = new Son2();
// son2.show();
//多态创建子类对象(向上转型)
Father2 f = new Son2();
f.fun();
//多态中的向下转型
Son2 s = (Son2)f;
s.show();
//Demo类与Father2类不存在继承的关系
// Demo d = (Demo)f; ×
}
}