`
yushu1987
  • 浏览: 16604 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

父类引用子类对象

F# 
阅读更多
    学习过java的人都知道,java语言中存在向上转型和向下转型。向上转型是指从更具体的类型被引用为较抽象的类型,或者是表示范围小的向范围大的转化。如 father f=new son();或是long a=(long)n;后者的理解比较简单,C语言中已经讲的很明白了,重要的是分析前者。
    父类引用子类对象的情况,一般是在实现和使用接口中使用,一是为了方便调用接口的方法,二是更好的处理接口实现的类。如下代码中的父类引用子类对象的例子。
class Father{
 public String name="Father";
 public Stirng getname(){
    System.out.println("这是父类");
    return name;
 }

public  class Son extends Father{
   Son()
   { name="Son"; }
   public String getname(){
      System.out.println("这是子类");
      return name;
   }
   public void setname(String name){
        this.name=name;
   }
   public static void main(String[] args){
      Father f=new Son();
      System.out.println(f.name);
      System.out.println(f.getname());
      f.setname("Father);//出错
       Son s=new Son();
      System.out.println(f.name);
      System.out.println(f.getname());
      f.setname("Father);//正确       
       System.out.println(f.name);
   }
}
结果输出:
Father
这是子类
Son
Son
这是子类
Father

    上述结果的输出原因是父类引用子类后,由子类构造函数生成的父类引用,产生的实例只能调用父类的域和方法,如果子类覆盖了父类的方法,那调用的是子类的方法。所以引用后的实例不能调用子类自定义的方法。而后的s对象,已经很明了了。
     此外java中,调用方法采用的是一种通信机制,即在f.getname()时,先通知相应的类,即父类Father,同时进入父类的空间。这时任何的域与方法都是该类的。
    总之,父类引用子类时,只能调用父类的方法和域,不能调用子类的自定义方法。这也是向上转型方法的缺陷。
分享到:
评论

相关推荐

    java多态性详解——父类引用子类对象

    本文将深入探讨Java中的多态性,特别是“父类引用子类对象”的概念,以及这一特性如何在实际编码中体现。 ### 多态性概述 多态性主要通过方法的重写(Overriding)、重载(Overloading)和动态绑定(Dynamic Binding)来...

    java多态性详解——父类引用子类对象.pdf

    Java 多态性详解 —— 父类引用子类对象 多态性是 Java 面向对象编程的三个特征之一,另外两个是封装和继承。多态性是指通过方法的重写、重载和动态连接来实现的。在 Java 中,多态性是为了解决单继承问题而引入的...

    父类引用指向子类对象

    在Java编程语言中,"父类引用指向子类对象"是一种常见的多态性表现,它体现了面向对象设计的核心原则之一。这种现象发生时,父类类型的引用被用来创建和操作子类的对象,允许我们利用子类扩展的功能,同时保持代码的...

    父类赋值给子类

    可以利用序列化将父类对象转换为字节数组,然后将这个字节数组反序列化为子类对象。这种方法适用于复杂的对象结构,但效率较低,且需要实现 `ISerializable` 接口。 4. **属性映射**: 使用辅助工具(如 ...

    java 子类对象赋值给父类对象的使用

    当我们创建一个子类对象并将其赋值给父类引用时,这种行为被称为向上转型(Upcasting)。这一过程是自动且安全的,因为子类对象包含了父类的所有属性和方法。下面我们将深入探讨这个主题,包括它的原理、示例代码...

    论JAVA继承机制中父类与子类的关系

    子类对象可以赋值给父类类型的引用,但此时该对象实际上仍然是一个子类实例,只是从编译角度看作父类类型。这种特性称为“多态”。 示例代码如下: ```java public class SuperClass { protected String ...

    父类引用指向子类对象[归纳].pdf

    在Java编程中,"父类引用指向子类对象"是一种常见的多态性表现形式,它体现了面向对象设计的核心原则之一。这种技术允许我们通过父类的引用或接口来调用子类的方法,从而实现了代码的灵活性和可扩展性。下面我们将...

    将子类引用赋给父类对象时,java虚拟主机并没有将那些非继承成员丢弃

    这个过程被称为向上转型(Upcasting),它允许我们用父类引用指向子类实例,从而实现更通用的代码设计。然而,这并不意味着在转换过程中会丢失子类的非继承成员,即那些在父类中不存在的方法或属性。Java虚拟机(JVM...

    Java中父类和子类之间的转换操作示例

    在 Java 中,父类和子类之间的转换操作可以分为两种:父类引用强转成为子类引用和父类不可以强转成为子类。 一、父类引用强转成为子类引用 在 Java 中,父类引用可以强转成为子类引用。这意味着,我们可以将父类...

    JAVA 多态操作----父类与子类转换问题实例分析

    这是因为父类变量可以引用子类对象,但是子类变量只能引用子类对象。 在 Java 中,我们可以使用强制类型转换来将父类对象转换为子类对象。但是,需要注意的是这种转换只有在父类对象实际上是子类对象的实例时才可以...

    【Java基础】怎么理解父类引用能指向子类对象?

    因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造方法,由于s中包含了父类的实例,所以s可以调用父类的方法。 下面我们来看一下代码:

    java 多态.docx

    总结来说,Java中的多态是通过继承、重写和父类引用子类对象来实现的,它提供了代码的灵活性、可扩展性和可维护性,是面向对象编程的重要特征之一。理解和熟练运用多态,对于编写高质量的Java应用程序至关重要。

    c++中子类对象不能调用父类中的虚函数

    然而,有一个重要的概念是:子类对象不能直接调用父类中的虚函数。下面我们将深入探讨这些知识点。 首先,让我们了解`指针`和`引用`。在C++中,`指针`是一个变量,它存储了另一个变量的地址。通过指针,我们可以...

    ChildClass.java

    父类引用指向子类对象时,没法调用子类特有的方法; 父类引用指向子类对象: java中子类强转父类,实际上依然是子类; 该引用只能调用父类中定义的方法和变量; 如果子类中重写了父类中的一个方法,那么在...

    java中的继承(子类调用父类构造方法还不懂).doc

    - **上溯造型**:使用父类的引用指向子类的对象。例如: ```java Father f = new Son1(); f.bidBoy(); ``` 在这个例子中,虽然`f`是`Father`类型的引用,但它实际上指向的是`Son1`对象。因此,`f.bidBoy()`调用的...

    类继承与对象复制的细节.zip_类继承与对象复制的细节

    通过父类引用子类对象,可以调用父类的方法,但如果子类重写了这个方法,实际执行的是子类的方法。 2. **方法重写**:子类可以覆盖父类的方法,以实现不同的功能。 3. **特殊方法**:Python中,类可以定义特殊方法...

    2022年java实习生周记大全.docx

    - 继承、重写和父类引用子类对象是实现多态的必要条件。 - 多态允许我们使用父类引用处理子类对象,提供更大的灵活性。 实习过程中,实习生不仅要掌握这些理论知识,还需要通过实践不断提升,解决实际问题,逐步...

    C#中子类调用父类的实现方法

    在C#编程语言中,子类继承父类后,可以访问和使用父类中的成员,包括方法...这种机制对于代码重用和类的层次结构设计至关重要,特别是在分层架构或面向对象设计中,子类可以扩展和定制父类的行为,同时保留其核心功能。

Global site tag (gtag.js) - Google Analytics