开发者

Java向上转型与向下转型超详细图解

开发者 https://www.devze.com 2025-04-08 10:30 出处:网络 作者: 煎饼小狗
目录一、什么是向上转型1、概念2、代码示例3、向上转型的优缺点二、什么是向下转型1、向下转型的概念2、代码示例三、向下转型的缺点及 insta编程客栈nceof 的使用1、向下转型的缺点2、instanceof的使用总结一、什么是
目录
  • 一、什么是向上转型
    • 1、概念
    • 2、代码示例
    • 3、向上转型的优缺点
  • 二、什么是向下转型
    • 1、向下转型的概念
    • 2、代码示例
  • 三、向下转型的缺点及 insta编程客栈nceof 的使用
    • 1、向下转型的缺点
    • 2、instanceof的使用
  • 总结

    一、什么是向上转型

    1、概念

    向上转型就是创建一个子类对象,将其当成父类对象来使用

    语法格式:父类类型  对象名  =  new  子类类型()

                         Animal   animal  =  new Cat ();

    Animal 是父类类型,但可以引用 Cat这个子类类型,因为是从小范围到大范围的转换。

    Java向上转型与向下转型超详细图解

    2、代码示例

    class Aminal {
        public void display() {
            System.out.println("Animal");
        }
    }
    class Cat extends Aminal {
        public void display() {
            System.out.println("Cat");
        }
    }
    class Dog extends Aminal {
    
    }
    
    public class Main{
        public static void main(String[] args) {
            Aminal aminal1 = new Aminal();
            Aminal aminal2 = new Cat();
            Aminal aminal3 = new Dog();
    
            aminal1.display();
            aminal2.display();
            aminal3.display();
        }
    }

    Java向上转型与向下转型超详细图解

    animal2中,Cat类 重写了 display方法,所以在实现时,打印的是Cat类中实现的内容。

    animal3中,Dog类 没有重写 display方法,所以打印的还是父类中的内容。

    由此我们可以得出:向上转型实现时

                                    先看子类有没有

                                    若是子类找不到

                                    再看父类有没有

       &n编程bsp;                            二者都无则报错!

    3、向上转型的优缺点

    优点:让代码实现更简单灵活

    缺点:不能调用到子类特有的方法

    例如:

    class Animal {
        public void display() {
            System.out.println("Animal");
        }
    }
    
    class Dog extends Animal {
        public void display() {
            System.out.println("dog");
        }
    
        public void eat() {
            System.out.println("吃骨头");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Animal animal = new Dog();
    
            animal.display();
            animal.eat(); //会报错
        }
    }

    所以,向上转型无法调用子类特有的方法!

    Java向上转型与向下转型超详细图解

    二、什么是向下转型

    1、向下转型的概念

    将一个子类对象向上转型之后可以当成父类对象使用,若需要调用子类特有的方法,则需要将父类对象再还原为子类对象。这就称作向下转型。

    Java向上转型与向下转型超详细图解

    2、代码示例

    class Animal {
        public void display() {
            System.out.println("Animal");
        }
    }
    
    class Dog extends Animal {
        public void display() {
            System.out.println("dog");
        }
    
        public void eat() {
            System.out.println("吃骨头");
        }
    }
    
    public class Main{
        public static void main(String[] args) {
            //向上转型
            Animal animal = new Dog();
            animal.display();
            
            //向下转型
            //Animal类中原本没有 eat方法,在向下转android型之前如果调用eat方法会报错
            //向下转型为子类Dog类后,就可以调用子类中特有的方法,而不会报错
            animal = (Dog)animal;
            ((Dog) animal).eat();
        }
    }

    运行结果:

    Java向上转型与向下转型超详细图解

    三、向下转型的缺点及 instanceof 的使用

    1、向下转型的缺点

    缺点:向下转型使用的比较少,而且不安全。如果转换失败,运行时就会抛异常。

    2、instanceof的使用

    Java中为了提高向下转型的安全性,引入了instanceof。如果表达式为 true,则可以安全转换。

    使用实例:

    class Animal {
        public void display() {
            System.out.println("Animal");
        }
    }
    
    class Dog extends Animal {
        public void display() {
            System.out.println("dog");
        }
    
        public void eat() {
            System.out.println("吃骨头");
        }
    }
    public cl编程ass Main {
        public static void main(String[] args) {
            //向上转型
            Animal animal = new Dog();
            
            //判断instanceof 是否为 true
            if(animal instanceof Dog) {
                //向下转型
                animal = (Dog)animal;
                ((Dog) animal).eat();
            } else {
                System.out.println("Animal无法向下转型为Dog");
            }
        }
    }
    

    总结

    到此这篇关于Java向上转型与向下转型的文章就介绍到这了,更多相关Java向上转型与向下转型内容请搜索编程客栈(www编程客栈.cppcns.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号