当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Upcasting用法及代码示例


InheritanceOOP(Object Oriented Programming)的重要支柱。这是 Java 中的一种机制,允许一个类继承另一个类的函数( fieldsmethods )。有两种方法可以在继承父类和子类的属性的同时初始化对象。他们是:

  1. 子 c = 新Child():此初始化的用途是访问父类和子类中存在的所有成员,因为我们继承了属性。
  2. 父 p = 新Child():这种类型的初始化仅用于访问父类中存在的成员以及子类中重写的方法。这是因为父类被向上转换为子类。

什么是向上转型?向上转型是类型转换子对象到父对象。向上转换可以隐式完成。向上转换使我们可以灵活地访问父类成员,但使用此函数不可能访问所有子类成员。我们可以访问子类的一些指定成员,而不是所有成员。例如,我们可以访问重写方法.例子:让有一个动物类。动物可以有许多不同的类别。其中一个类是。所以,我们假设鱼类类扩展了动物类。因此,本例中的两种继承方式的实现方式为: 我们通过下面的代码来了解一下区别:

Java


// Java program to demonstrate
// the concept of upcasting
// Animal Class
class Animal {
    String name;
    // A method to print the
    // nature of the class
    void nature()
    {
        System.out.println("Animal");
    }
}
// A Fish class which extends the
// animal class
class Fish extends Animal {
    String color;
    // Overriding the method to
    // print the nature of the class
    @Override
    void nature()
    {
        System.out.println("Aquatic Animal");
    }
}
// Demo class to understand
// the concept of upcasting
public class GFG {
    // Driver code
    public static void main(String[] args)
    {
        // Creating an object to represent
        // Parent p = new Child();
        Animal a = new Fish();
        // The object 'a' has access to
        // only the parent's properties.
        // That is, the colour property
        // cannot be accessed from 'a'
        a.name = "GoldFish";
        // This statement throws
        // a compile-time error
        // a.color = "Orange";
        // Creating an object to represent
        // Child c = new Child();
        Fish f = new Fish();
        // The object 'f' has access to
        // all the parent's properties
        // along with the child's properties.
        // That is, the colour property can
        // also be accessed from 'f'
        f.name = "Whale";
        f.color = "Blue";
        // Printing the 'a' properties
        System.out.println("Object a");
        System.out.println("Name: " + a.name);
        // This statement will not work
        // System.out.println("Fish1 Color" +a.color);
        // Access to child class - overridden method
        // using parent reference
        a.nature();
        // Printing the 'f' properties
        System.out.println("Object f");
        System.out.println("Name: " + f.name);
        System.out.println("Color: " + f.color);
        f.nature();
    }
}
输出:
Object a
Name: GoldFish
Aquatic Animal
Object f
Name: Whale
Color: Blue
Aquatic Animal

程序示意图: illustration

  • 从上面的例子可以清楚地看出,即使是子类型,我们也不能使用父类引用来访问子类成员。那是:
// This statement throws
// a compile-time error
a.color = "Orange";
  • 从上面的例子中,我们还可以观察到我们能够使用相同的父类引用对象来访问父类成员和子类的重写方法。那是:
// Access to child class
// overridden method 
a.nature();
  • 因此,我们可以得出结论,使用这两种不同语法的主要目的是在访问类中的各个成员时获得变化。


相关用法


注:本文由纯净天空筛选整理自sofiaa大神的英文原创作品 Upcasting in Java with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。