`
luzl
  • 浏览: 565445 次
  • 性别: 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  
可以这样解释:父类的变量与子类的变量重名的情况下,互不干扰,也就是不覆盖.具体原因还在摸索中.

相关推荐

    吉林大学2016年c++期末考试题详解

    第二大题: 1. 在面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许你将父对象设置成为一个或更多的他的子对象相等...而且静态成员变量在对象实例化之前就可以进行赋值,说明静态成员函数不在对象内部。

    建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个主函数。声明一个学学生对象。然后调用成员函数在屏幕输出学生信息。

    题目:建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个...

    C++多继承实例

    子类对父类的公共继承。父类有默认构造函数,带参数构造函数,保护变量的赋值与输出,子类有默认构造函数,父类带参构造函数的继承与父子类变量的赋值,子类自定义函数对父子类变量的操作

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...

    7instantsof对象造型虚方法调用.rar

    1.总是可以“父=子”赋值。此时不需要类型转换。 2.可以执行类型转换“子=(子)父”,但需要运行时进行检查。...即:如果父类的实例是在子类的实例上塑造的,“子=(子)父”时就不会抛出异常。

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...

    java三大特性说明

    清楚说明了java三大特性: 抽象:处理各种问题的第一步,把具体的问题与解决问题的方法结合起来,这就是抽象的过程.  Java常见的访问控制修饰符:  Public :到处都可以访问,不受包和父子类关系的限制  默认: 只...

    Java中的final关键字详解及实例

    用final关键字修饰的方法是不能被该类的子类override(重写),因此,如果在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。 注:类的private方法会隐式地被指定为final方法。 public class ...

    c.c++找工作面试重点结构图-mindmanager

    面向对象中的继承指类的继承,类似父子继承 1、子类拥有父类的所有成员变量和成员函数 2、子类就是一种特殊的父类 3、子类对象可以当作父类对象使用(赋值兼容性原则) 4、子类可以拥有父类没有的方法和属性..........

    【05-面向对象(下)】

    •对一个final变量来说,不管它是类变量、实例变量,还是局部变量,只要该变量满足3个条件,这个final变量就 不再是一个变量,而是相当于一个直接量。  –使用final修饰符修饰;  –在定义该final变量时指定...

    【Java高频面试题】–类的初始化过程以及实例的初始化过程

    子类初始化前,会先加载并初始化它的父类 初始化一个类,其实质上就是执行了()方法 ()方法包含了,静态变量显式赋值代码以及静态代码块 静态变量显式赋值代码以及静态代码块的执行顺序,由它们的先后顺序执行,先...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    对象声明实际上是给对象命名,也称定义一个实例变量。对象声明的一般格式为: type name 其中,type 是一个类的类名,用它声明的对象将属于改类;name 是对象名。 例如: Date today; Rectangle myRectangle; 第一...

    java编程基础,应用与实例

    5.4 局部变量和成员变量 67 5.5 this引用 68 5.6 静态变量与静态方法 70 5.7 成员与静态方法的关系 71 5.8 包与导入 72 5.9 访问控制符 74 5.10 重载 77 5.11 构造函数 79 5.12 类的初始化 83 ...

    java 程序设计 期中考试.doc

    (1) 创建一个Rectangle类,添加width和height两个成员变量. (2) 在Rectangle中添加两种方法分别计算矩形的周长和面积. (3) 编程利用Rectangle输出一个矩形的周长和面积. 3.编写一个程序:在控制台中窗口中提示...

    JAVA程序设计》模拟题带答案(A卷).doc

    Java中的继承关系中,子类可以继承父类的成员,但不一定拥有更多的成员。 5. 抽象方法必须在抽象类中,所以抽象类中的方法都必须是抽象方法。( 错 ) 这道题目考察了Java中的抽象类和抽象方法。Java中的抽象方法...

    java经典选择题题库及答案.docx

    方法重写是指子类对父类方法的重写。 Java语言的异常处理是指程序对错误或异常的处理。异常可以是语法错误、逻辑错误、运行时错误等。Java语言提供了try、catch、finally等关键字来处理异常。 Java语言的Applet...

    javascript学习笔记.docx

    e) 子类:把原型对象赋值为父类的一个实例,默认父类为Object的实例。同时还要将prototype.constructor赋值为子类的构造函数自己。 f) 继承:只是在查询一个属性时自动发生,而不会在写属性时发生,就是说单写一个...

    Java开发技术大全(500个源代码).

    localVSmember.java 局部变量与成员变量同名问题示例 onlyTest.java 对象传值示例 otherClass.java 从类的外部访问对象的成员 showInstVar.java 演示不同的对象拥有不同的成员变量 showMain.java 演示main方法...

Global site tag (gtag.js) - Google Analytics