Java中向上转型与向下转型有何区别及具体应用场景?

2026-05-24 03:252阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1126个文字,预计阅读时间需要5分钟。

Java中向上转型与向下转型有何区别及具体应用场景?

本文以家庭分享为例,阐述了Java中的向上转型与向下转型的具体代码,并提供相关参考资料,内容如下:

+ 基础知识:Java中的继承机制使得一个类可以继承另一个类的属性和方法。继承分为两种类型:向上转型和向下转型。

+ 向上转型:当一个子类对象赋值给父类引用时,称为向上转型。例如:

javaclass Animal { public void eat() { System.out.println(Animal eat); }}

class Dog extends Animal { public void eat() { System.out.println(Dog eat); }}

public class Main { public static void main(String[] args) { Animal animal=new Dog(); animal.eat(); // 输出:Dog eat }}

+ 向下转型:当需要调用子类特有的方法或属性时,需要将父类引用转换为子类引用,称为向下转型。例如:

javaclass Animal { public void eat() { System.out.println(Animal eat); }}

class Dog extends Animal { public void eat() { System.out.println(Dog eat); } public void bark() { System.out.println(Dog bark); }}

public class Main { public static void main(String[] args) { Animal animal=new Dog(); animal.eat(); // 输出:Dog eat

Dog dog=(Dog) animal; dog.bark(); // 输出:Dog bark }}

+ 注意事项:

1.向下转型可能失败,如果父类引用实际上不是子类对象,会抛出`ClassCastException`异常。

2.向上转型不会丢失子类特有的方法或属性,但无法调用这些方法或属性。

本文实例为大家分享了java向上转型与向下转型的具体代码,供大家参考,具体内容如下

基础知识:Java中的继承机制使得一个类可以继承另一个类,继承的类称为子类,被继承的类称为父类。在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象,所以子类可以继承父类中所有的属性和方法,包括private修饰的属性和方法,但是子类只是拥有父类private修饰的属性和方法,却不能直接使用它,也就是无法直接访问到它(子类可以通过调用父类的public声明的get方法来获取父类的private属性和private方法)。同时子类可以对继承的方法进行重写(@Override),并且新建自己独有的方法。

1.向上转型:

父类 : class Fruit {}
子类 : class Apple extends Fruit{}

创建向上转型对象 fruit ;
Fruit fruit = new Apple();
Apple 向上转型为父类
如果 Apple 中有重写父类方法,fruit 对象默认调用子类中重写方法

注意 :

fruit 可以直接访问子类重写方法。
fruit 不能直接访问子类私有方法、子类所有属性。
fruit 可以通过重写方法调用子类私有方法和属性
fruit 重写方法中调用方法和属性顺序 : 子类 -> 父类

其他 : 关于重写的返回值类:如果方法的返回类型是 void
和基本数据类型,则返回值重写时不可修改。但是如果方法的返回值是引用类型,重写时是可以返回该引用类型的子类的。

2.向下转型

注意 : 只有向上转型过的对象才能向下转型

向下转型为恢复子类所有功能。

Apple apple = (Apple) fruit;

3.(多态)作用

减少编程代码

例 : 一个方法调用三种子类

public class Demo {     public static void run(Fruit fruit){         fruit.show();     }     public static void main(String[] args) {         run(new Apple());         run(new Orange());         run(new Banana());     } } abstract class Fruit{     abstract void show(); } class Apple extends Fruit{     @Override     public void show(){         System.out.println("apple");     } } class Orange extends Fruit{     @Override     public void show(){         System.out.println("orange");     } } class Banana extends Fruit{     @Override     public void show(){         System.out.println("banana");     } }

再进行向上转型

public class Demo {     public static void run(Fruit fruit){         fruit.show();         if(fruit instanceof Apple){             Apple apple = (Apple) fruit;             apple.eatApple();         }else if(fruit instanceof Orange){             Orange orange = (Orange) fruit;             orange.eatOrange();         }else{             Banana banana = new Banana();             banana.eatBanana();         }     }     public static void main(String[] args) {         run(new Apple());         run(new Orange());         run(new Banana());     } } abstract class Fruit{     abstract void show(); } class Apple extends Fruit{     @Override     public void show(){         System.out.println("apple");     }     public void eatApple(){         System.out.println("吃了一个apple");     } } class Orange extends Fruit{     @Override     public void show(){         System.out.println("orange");     }     public void eatOrange(){         System.out.println("吃了一个orange");     } } class Banana extends Fruit{     @Override     public void show(){         System.out.println("banana");     }     public void eatBanana(){         System.out.println("吃了一个banana");     } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

Java中向上转型与向下转型有何区别及具体应用场景?

本文共计1126个文字,预计阅读时间需要5分钟。

Java中向上转型与向下转型有何区别及具体应用场景?

本文以家庭分享为例,阐述了Java中的向上转型与向下转型的具体代码,并提供相关参考资料,内容如下:

+ 基础知识:Java中的继承机制使得一个类可以继承另一个类的属性和方法。继承分为两种类型:向上转型和向下转型。

+ 向上转型:当一个子类对象赋值给父类引用时,称为向上转型。例如:

javaclass Animal { public void eat() { System.out.println(Animal eat); }}

class Dog extends Animal { public void eat() { System.out.println(Dog eat); }}

public class Main { public static void main(String[] args) { Animal animal=new Dog(); animal.eat(); // 输出:Dog eat }}

+ 向下转型:当需要调用子类特有的方法或属性时,需要将父类引用转换为子类引用,称为向下转型。例如:

javaclass Animal { public void eat() { System.out.println(Animal eat); }}

class Dog extends Animal { public void eat() { System.out.println(Dog eat); } public void bark() { System.out.println(Dog bark); }}

public class Main { public static void main(String[] args) { Animal animal=new Dog(); animal.eat(); // 输出:Dog eat

Dog dog=(Dog) animal; dog.bark(); // 输出:Dog bark }}

+ 注意事项:

1.向下转型可能失败,如果父类引用实际上不是子类对象,会抛出`ClassCastException`异常。

2.向上转型不会丢失子类特有的方法或属性,但无法调用这些方法或属性。

本文实例为大家分享了java向上转型与向下转型的具体代码,供大家参考,具体内容如下

基础知识:Java中的继承机制使得一个类可以继承另一个类,继承的类称为子类,被继承的类称为父类。在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象,所以子类可以继承父类中所有的属性和方法,包括private修饰的属性和方法,但是子类只是拥有父类private修饰的属性和方法,却不能直接使用它,也就是无法直接访问到它(子类可以通过调用父类的public声明的get方法来获取父类的private属性和private方法)。同时子类可以对继承的方法进行重写(@Override),并且新建自己独有的方法。

1.向上转型:

父类 : class Fruit {}
子类 : class Apple extends Fruit{}

创建向上转型对象 fruit ;
Fruit fruit = new Apple();
Apple 向上转型为父类
如果 Apple 中有重写父类方法,fruit 对象默认调用子类中重写方法

注意 :

fruit 可以直接访问子类重写方法。
fruit 不能直接访问子类私有方法、子类所有属性。
fruit 可以通过重写方法调用子类私有方法和属性
fruit 重写方法中调用方法和属性顺序 : 子类 -> 父类

其他 : 关于重写的返回值类:如果方法的返回类型是 void
和基本数据类型,则返回值重写时不可修改。但是如果方法的返回值是引用类型,重写时是可以返回该引用类型的子类的。

2.向下转型

注意 : 只有向上转型过的对象才能向下转型

向下转型为恢复子类所有功能。

Apple apple = (Apple) fruit;

3.(多态)作用

减少编程代码

例 : 一个方法调用三种子类

public class Demo {     public static void run(Fruit fruit){         fruit.show();     }     public static void main(String[] args) {         run(new Apple());         run(new Orange());         run(new Banana());     } } abstract class Fruit{     abstract void show(); } class Apple extends Fruit{     @Override     public void show(){         System.out.println("apple");     } } class Orange extends Fruit{     @Override     public void show(){         System.out.println("orange");     } } class Banana extends Fruit{     @Override     public void show(){         System.out.println("banana");     } }

再进行向上转型

public class Demo {     public static void run(Fruit fruit){         fruit.show();         if(fruit instanceof Apple){             Apple apple = (Apple) fruit;             apple.eatApple();         }else if(fruit instanceof Orange){             Orange orange = (Orange) fruit;             orange.eatOrange();         }else{             Banana banana = new Banana();             banana.eatBanana();         }     }     public static void main(String[] args) {         run(new Apple());         run(new Orange());         run(new Banana());     } } abstract class Fruit{     abstract void show(); } class Apple extends Fruit{     @Override     public void show(){         System.out.println("apple");     }     public void eatApple(){         System.out.println("吃了一个apple");     } } class Orange extends Fruit{     @Override     public void show(){         System.out.println("orange");     }     public void eatOrange(){         System.out.println("吃了一个orange");     } } class Banana extends Fruit{     @Override     public void show(){         System.out.println("banana");     }     public void eatBanana(){         System.out.println("吃了一个banana");     } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

Java中向上转型与向下转型有何区别及具体应用场景?