Java 对象的下转规则

Java 对象的下转规则

在Java中,下转是将父类对象转换为子类对象的过程。我们需要显式地进行转换。这与我们在原始类型转换中所做的非常相似。

在本文中,我们将学习有关下转的知识以及在Java中进行下转对象时必须遵循的规则。

Java中的对象下转

之前我们讨论过下转与类型转换有些相似。但是,它们之间也存在一些区别。首先是我们只能对原始数据类型进行类型转换,其次是它是不可逆的操作,即在类型转换中我们直接使用值,如果我们一旦改变了值,就无法恢复。另一方面,在下转过程中,原始对象不会改变,只改变了它的类型。

下转的需求

例如,假设有两个类,一个是超类,另一个是它的子类。在这种情况下,下转就起到了作用,它允许我们从超类访问子类的成员变量和方法。

语法

nameOfSubclass nameOfSubclassObject = (nameOfSubclass) nameOfSuperclassObject;

尽管这个语法看起来很简单,但我们写这个语法时可能会犯错误。此外,我们不能像在下一个示例中要做的那样直接向下转换对象。如果我们这样做,编译器会抛出“ClassCastException”。

示例1

以下示例说明了提供错误的向下转换语法可能的结果。为此,我们将定义两个类,并尝试使用错误的语法向下转换超类的对象。

class Info1 {  
// it is the super class
   void mesg1() { 
      System.out.println("Tutorials Point"); 
   }
} 
class Info2 extends Info1 {
// inheriting super class
   void mesg2() { 
      System.out.println("Simply Easy Learning"); 
   }
} 
public class Down {
   public static void main(String[] args) { 
      Info2 info2 = (Info2) new Info1(); 
      // Wrong syntax of downcasting
      // calling both methods using sub class object
      info2.mesg1(); 
      info2.mesg2(); 
   } 
}

输出

Exception in thread "main" java.lang.ClassCastException: class Info1 cannot be cast to class Info2 (Info1 and Info2 are in unnamed module of loader 'app')
   at Down.main(Down.java:13)

示例2

以下示例演示了如何正确执行对象向下转型。为此,我们将创建两个类,然后定义一个引用子类的超类对象。最后,我们使用正确的向下转型语法。

class Info1 {
// it is the super class
   void mesg1() { 
      System.out.println("Tutorials Point"); 
   }
} 
class Info2 extends Info1 {  
// inheriting super class
   void mesg2() { 
      System.out.println("Simply Easy Learning"); 
   }
} 
public class Down { 
   public static void main(String[] args) { 
      // object of super class refers to sub class
      Info1 info1 = new Info2(); 
      // performing downcasting
      Info2 info2 = (Info2) info1;
      // calling both methods using object of sub class 
      info2.mesg1(); 
      info2.mesg2(); 
   } 
}

输出

Tutorials Point
Simply Easy Learning

结论

还有一个修改对象的概念叫作Upcasting。在这个过程中,子类的对象被转换为超类对象。它可以隐式地完成。上述两个概念,即向上转型和向下转型,一起被称为对象转型。在本文中,我们通过示例讨论了对象向下转型。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程