`
luzl
  • 浏览: 572150 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

子类实例赋值给父类实例下成员变量问题

    博客分类:
  • Java
 
阅读更多
package scjp;

class Base  
{ 
    int i = 99; 
    public void amethod() 
    { 
        System.out.println("Base.amethod()"); 
    } 
         
    Base() 
    { 
        amethod(); 
    } 
} 
public class Demo66 extends Base 
{ 
    int i = -1; 
         
    public static void main(String argv[]) 
    { 
    	Demo66 b = new Demo66(); 
        System.out.println(b.i); 
        b.amethod(); 
    } 

    public void amethod() 
    { 
        System.out.println("Derived.amethod()"); 
    } 
} 



执行结果是:
Derived.amethod()  //这行之所以不是 Base.amethod()原因是因为子类覆盖了amethod这个方法的原因.
-1
Derived.amethod()

但是当把
Demo66 b = new Demo66();
改成
Base b = new Demo66();
时执行结果却是:
Derived.amethod()
99
Derived.amethod()
这是为什么呢,不管怎样b不都是指向new Demo66();的对象引用吗?为什么会变值呢?


分享到:
评论
1 楼 luzl 2008-11-08  
可以这样解释:父类的变量与子类的变量重名的情况下,互不干扰,也就是不覆盖.具体原因还在摸索中.

相关推荐

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

    3. **变量隐藏**:如果子类和父类有同名的实例变量,子类变量会“隐藏”父类变量。通过父类引用访问这些变量时,实际访问的是父类的变量,而非子类的。 4. **类型转换**:虽然父类引用可以指向子类对象,但反过来...

    父类赋值给子类

    子类的构造函数可以接受一个父类对象作为参数,然后在构造函数内部,使用成员变量直接赋值或者通过 `base` 关键字调用父类的构造函数。例如: ```csharp public class Parent { public int Id { get; set; } ...

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

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

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

    在第二种情况下,我们使用 `Father` 对象赋值给 `Son` 变量,但是失败了。这是因为 `Father` 对象实际上是 `Father` 对象的实例,而不是 `Son` 对象的实例。 因此,我们可以总结出以下结论: * 子类对象可以当作...

    Java4Android 19_子类实例化过程

    在Java中,实例变量的初始化可以在声明时直接赋值,也可以在构造器中进行。无论哪种方式,父类的实例变量会在子类的实例变量之前初始化。这是因为子类实例变量是在父类实例变量的基础上增加的,因此需要先初始化父类...

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

    由于 Java 语言的多态性使得可以用一个子类的实例赋值给一个父类的变量,而在一些情况下需要判断变量到底是一个什么类型的对象。 在 Java 中,数组也可以是同类收集(homogenous collections)或异类收集...

    java-深入面向对象程序设计

    向上造型是把一个类的子类引用赋值给父类变量,向下造型是把父类对象赋值给予子类对象。 抽象类是使用 abstract 关键字对类进行修饰的,抽象类只有方法头的定义,没有方法体。抽象类不能被实例化,定义抽象类的目的...

    Java 成员变量和局部变量

    protected成员变量在同一个包或子类中可访问;无修饰符的成员变量(包访问权限)只在同包内可访问。 3. **静态与非静态**: 静态成员变量属于类,而非实例。这意味着所有类的实例共享同一份静态变量。非静态成员变量...

    Java简单问题常用概念

    如果子类定义了和父类同名的成员变量或方法,那么子类将会隐藏或重写父类的成员变量或方法。隐藏是指子类的成员变量遮蔽了父类的同名成员变量;重写是指子类提供了与父类同名、同参数列表的方法,实现了方法的定制。...

    Java语言程序设计教程(Java 7)——入门与提高篇04

    在创建子类实例时,会首先调用父类的构造方法。 ### final修饰符和abstract修饰符 - **final修饰符**:当类、方法或变量被`final`修饰时,意味着它们不能被继承、重写或修改。`final`类不能被继承,`final`方法不...

    java中类的初始化顺序

    // 子类实例成员变量 public String s_Field = "子类实例"; // 子类静态初始化块 static { System.out.println(s_StaticField); System.out.println("子类静态初始化"); } // 子类实例初始化块 { System...

    基对象引用子类实例(C# 形象说明:父母可以代表孩子做很多事情)

    我们可以在不损失任何功能的情况下,将`DerivedClass`的实例赋值给`BaseClass`类型的变量: ```csharp DerivedClass derivedInstance = new DerivedClass(); BaseClass baseReference = derivedInstance; // 向上...

    JavaPD-Ch05mao 继承与接口及泛型 线下班1

    对象的上转型对象(Upcasting)是指将子类对象赋值给父类类型的引用,这是Java中多态性的体现。这样做的好处是可以使用父类引用处理各种子类对象,而无需知道具体的子类类型。 `abstract`类是不能实例化的,它通常...

    java复习题.pdf

    11. **子类与父类的关系**:子类对象可以直接赋值给父类对象,因为子类是父类的实例,反之则不行。子类对象可以调用父类的非私有成员,包括被覆盖的方法和被隐藏的属性,使用`super`关键字作为前缀。 12. **类的...

    Java对象与内存控制

    - 创建子类实例时,首先会执行父类的构造器,然后才是子类的构造器。 - `super`关键字用于调用父类的构造器,而`this`关键字用于调用当前类中的其他构造器。 - `super`和`this`必须出现在构造器的第一行,并且每次...

    JAVA基础知识点总结.pdf

    这种特性实现了代码的复用,并且通过子类对象赋值给父类变量,体现了多态性,即同一父类引用可以指向不同子类的实例。 在面向对象编程中,类(Class)和对象(Object,也称为实例,Instance)是两个关键概念。类...

    C类的成员变量和成员函数-C教程共3页.pdf.zip

    在C++编程语言中,类(Class)是创建对象的基础,它定义了一组相关的属性(成员变量)和行为(成员函数)。本教程将深入探讨C类的成员变量和成员函数,帮助你更好地理解和掌握面向对象编程的核心概念。 一、成员...

    面向对象oop详解

    向上转型是将子类对象赋值给父类引用的过程,是一种自动类型转换,此时可以调用父类中的方法,如果方法在子类中被重写了,那么会调用子类中的实现,这种机制被称为动态绑定。多态的实现减少了代码的冗余,提高了程序...

    java期中考试题.pdf

    * 继承的概念:子类继承父类的成员变量和方法,子类可以使用父类的成员变量和方法。 * 继承的规则:子类和父类在同一个包中,子类可以继承父类的非私有成员变量和方法;子类和父类不在同一个包中,子类可以继承父类...

    实验九-子类和继承1.doc

    当子类中有与父类同名的方法或变量时,子类的成员会隐藏(遮盖)父类的成员。如果子类需要调用父类的同名成员,可以使用`super`关键字。例如,子类中定义了一个新的`name`变量,父类的`name`变量会被隐藏,通过`...

Global site tag (gtag.js) - Google Analytics