面向对象--多态--多态中的转型问题

多态中的转型问题 

程序示例

/*
        多态的弊端:
            多态无法使用子类特有的方法

        我就想使用子类特有的功能,能否使用?  
                  答案是能

        那怎么使用呢?
            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; ×

    }
}
posted @ 2021-12-11 20:36  赤兔胭脂小吕布  阅读(26)  评论(0编辑  收藏  举报