java 向上转型向下转型

简介: 1.名词解释向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口。向下转型:父类引用的对象转换为子类类型称为向下转型。先看两个类://Fahther类class Father{ public void out() { System.out.println("

1.名词解释

  • 向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口。
  • 向下转型:父类引用的对象转换为子类类型称为向下转型。

先看两个类:

//Fahther类
class Father
{
     public  void out()
    {
        System.out.println("father");
    }
}

//Son类,继承自Father
class Son extends Father
{
    public   void out()
    {
        System.out.println("son");
    }
    public   void out2()
    {
        System.out.println("son2");
    }
}
AI 代码解读

2.向上转型

向上转型示例:
Father father=new Son();//定义了一个Father的变量,实际上却赋值了一个Son类型

2.1 向上转型的时候,会遗失子类独有的方法,根据以上两个类,Son类转型成为Father类的时候,Son类的“out2”方法会遗失。也就说以下写法会报错:

Father father=new Son();
father.out2();//会报错
AI 代码解读

2.2 向上转型的对象可以调用父类拥有的方法,具体执行的是子类原本的代码块

Father father=new Son();
father.out();//因为father变量引用的本质还是new Son,所以father.out()会执行Son类的out()代码块.
AI 代码解读

3.向下转型

顾名思义,向下转型就是:Father -> Son
但是,有条件。

Father father = new Father();
Son son=(Father)father;//这是不允许的
AI 代码解读

以上代码就是不被允许的,因为:只有本质是子类的类型才能被向下转型
以上代码中,father本质是new Father()。

只有被向上转型过的子类,才能执行向下转型

Father father=new Son();
Son son=(Son) father;//这是可行的,因为father变量引用的是new Son(),它本质上是一个Son类的对象
AI 代码解读

4.代码示例

package com.ycty;

public class ClassTest {

    public static void main(String[] args)
    {
        Father father=new Father();
        Son son=new Son();
        father.out();
        son.out();

        //向上转型
        father=new Son();
        father.out();//实际执行的是Son重写的方法

        //向下转型
        son=(Son)father;
        son.out();

        father =new Father();
        son=(Son)father;
    }
}

/**
 * 
 * Father类
 *
 */
class Father
{
     public  void out()
    {
        System.out.println("father");
    }
}
/**
 * 
 * Son类
 *
 */
class Son extends Father
{
    public   void out()
    {
        System.out.println("son");
    }
    public   void out2()
    {
        System.out.println("son2");
    }
}
AI 代码解读

输出:
这里写图片描述

目录
打赏
0
0
0
0
2
分享
相关文章
Java 中的向上转型与向下转型
本文深入探讨了Java中的向上转型与向下转型概念。向上转型(Upcasting)指将子类对象赋值给父类引用,过程安全且无需显式转换,常用于多态场景。向下转型(Downcasting)则是将父类引用转为子类类型,需显式转换并注意安全性,通常借助`instanceof`避免`ClassCastException`。文章通过实例解析两种转型的特点、使用场景及注意事项,帮助开发者灵活运用以提升代码质量与可扩展性。
117 2
【零基础学Java】—对象的向上和向下转型(二十七)
【零基础学Java】—对象的向上和向下转型(二十七)
|
9月前
|
【Java】向上转型和向下转型
【Java】向上转型和向下转型
95 0
Java中的 向上转型 | 向下转型
Java中的 向上转型 | 向下转型
198 0
Java | 浅谈多态中的向上转型与向下转型
Java | 浅谈多态中的向上转型与向下转型
251 0
【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
226 0
【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
java_类向上转型以及动态绑定机制(多态)
语法:父类类型 变量名=new 子类类型();特点:编译类型看左边,运行类型看右边
153 0
Java多线程基础
本文主要讲解多线程相关知识,分为两部分。第一部分涵盖多线程概念(并发与并行、进程与线程)、Java程序运行原理(JVM启动多线程特性)、实现多线程的两种方式(继承Thread类与实现Runnable接口)及其区别。第二部分涉及线程同步(同步锁的应用场景与代码示例)及线程间通信(wait()与notify()方法的使用)。通过多个Demo代码实例,深入浅出地解析多线程的核心知识点,帮助读者掌握其实现与应用技巧。
|
5月前
|
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
295 60
【Java并发】【线程池】带你从0-1入门线程池
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等