`
horizon0315
  • 浏览: 29842 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java里类的继承机制-成员变量(转)

    博客分类:
  • java
阅读更多
在网上看见一个关于java继承的问题,觉得这是很多初学java应该注意的问题。
Java代码
public abstract class A {
  int i=1;
  public void printI() {
    System.out.println("i="+i);
  }
}

public class B  extneds A{
  int i=2;
  public static void main(String[] args) {
    B b=new B();
    b.printI();
  }
}




那么,控制台打出来的i的值是多少?
呵呵,如果一下功夫就能说出正确结果1,那么,下面部分就不需要往下看了。

1、类的继承知识点
(1)java不支持多重继承,也就是说子类至多只能有一个父类
(2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法
(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承
(4)子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。

2、答案是2者如是说
  子类B中的变量i和父类A中的变量i重名, 那么子类B中的变量i将会覆盖掉父类中的同名变量i. 则访问父类中的变量时jvm会把子类cast到父类.所以,打印出的结果应该是“i=2”;

3、歧义的产生
  歧义的产生最关键的地方是子类B中的变量i将会覆盖掉父类中的同名变量i的覆盖两个字。这里,我觉得这两个字容易误导。应该改为屏蔽或隐藏。因为在这里父类的成员变量是没有被改变。

4、jvm的执行过程
(1)子类B 的构造方法被调用,实例化一个B对象,B对象的成员被初始化
(2)jvm隐含的调用父类的构造方法,实例化一个A对象,A对象的成员被初始化。
(3)由于A对象的printI()未被屏蔽,所以调用的A对象的printI()函数。
那么,在这里A的成员函数当然是访问自己的成员变量了。

5、super关键字
super关键字在java中的作用是使被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的成员变量和成员成员方法。super是用在子类中,目的是访问直接父类中被屏蔽的成员。上面的代码也可以这样写:
Java代码

  public abstract class A {
  int i=1;
  public void printI() {
    System.out.println("i="+i);
  }
}
public class B extends A{
	public int i=2;
	public void printI(){
		super.printI();
	}
	public static void main(String[] args){
		B b= new B();
		b.printI();
		
	}
}

分享到:
评论

相关推荐

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

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

    基于某JAVA地剪刀石头布游戏设计——Java课程设计报告材料-.doc

    目 录 前言3 1剪刀石头布游戏设计思路阐述4 2程序概要设计5 功能需求分析5 性能需求分析5 程序框图5 Java类与自定义类相互继承的层次关系6 Java类与自定义类的说明6 类中成员与作用7 2.5程序运行效果与存在的问题7 ...

    基于JAVA的搜索引擎 lucene-2.2.0

    // IndexFileDeleter deleter是IndexWriter类的一个私有的成员变量,它在org.apache.lucene.index包里面,主要对删除索引文件进行实现和管理 deleter = new IndexFileDeleter(directory, deletionPolicy == null ...

    21天学通Java-由浅入深

    240 12.2.1 创建局部内部类 240 12.2.2 在局部内部类中访问外部类成员变量 240 12.2.3 在局部内部类中访问外部类的局部变量 241 12.2.4 静态方法中的局部内部类 243 12.3 静态内部类 244 12.3.1 创建静态内部类 244 ...

    JAVA实验报告

    (六)类的继承性 16 (七)类的多态性 18 实验3 包、接口与异常处理 22 一、实验目的 22 二、实验要求 22 三、实验内容 22 (一)了解并使用 Java 的系统包 22 (二)创建并使用自定义包 22 (三)使用接口技术 24 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    11.4.3 使用private修饰类的成员变量 318 11.4.4 使用private,然后呢? 320 11.4.5 变量的覆盖 322 11.4.6 使用final修饰成员变量 325 11.4.7 静态成员变量 326 11.4.8 局部变量的修饰符 326 11.4.9 当final...

    【干货】长达4万字的Java知识点!

    Java的变量知识3-成员变量与局部变量4-Java的运算符以及判断语句5-循环语句6-数组的使用7-重点:冒泡排序、选择排序、快速排序8-方法、类、对象9-继承和多态10-抽象类11-接口12-异常以及异常处理机制13-J

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    11.4.3 使用private修饰类的成员变量 318 11.4.4 使用private,然后呢? 320 11.4.5 变量的覆盖 322 11.4.6 使用final修饰成员变量 325 11.4.7 静态成员变量 326 11.4.8 局部变量的修饰符 326 11.4.9 当final...

    java课程设计报告-五子棋.doc

    、 Java中类定义的格式为: [类修饰符] class 类名 [extends 基类] [implements 接口] {// 成员变量声明 (Member variable declaration) // 成员方法声明 (Member method declaration)} 其中,class、extends和...

    AIC的Java课程1-6章

    第3版 机械工业出版社  教学内容和要求 知识点 重要程度 使用频度 难度 Java 入门 高 中 易 变量和运算符 高 高 中 控制结构 高 高 易 数组 高 高 中 方法 很高 高 中 封装 很高 很高 难...

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

    对象的使用包括引用对象的成员变量和方法,通过运算符·可以实现对变量的访问和方法的调 用,变量和方法可以通过设定一定的访问权限(见下面的例子)来允许或禁止其它对象对它的 访问。 我们先定义一个类 Point。 例子...

    Java2实用教程.rar

    4 2 3成员变量和局部变量 4 2 4方法 4 2 5方法重载 4 2 6构造方法 4 2 7类方法和实例方法 4 2 8值得注意的问题 4 3对象 4 3 1创建对象 4 3 2使用对象 4 3 3于象的引用和实体 4 3 4参数传值 4 4static关键字 4 4 1...

    java课程设计报告-五子棋(1).doc

    、 Java中类定义的格式为: [类修饰符] class 类名 [extends 基类] [implements 接口] {// 成员变量声明 (Member variable declaration) // 成员方法声明 (Member method declaration)} 其中,class、extends和...

    java课程设计报告-五子棋(2).doc

    、 Java中类定义的格式为: [类修饰符] class 类名 [extends 基类] [implements 接口] {// 成员变量声明 (Member variable declaration) // 成员方法声明 (Member method declaration)} 其中,class、extends和...

    Java程序设计实例与操作光盘

    其内容包括Java语言特色和Java开发环境介绍,Java的数据类型、常量、变量、运算符和表达式、控制结构等编程基础知识,Java中类、对象、继承、多态、成员变量、成员方法等面向对象程序设计的概念、特点和用法,...

    疯狂JAVA讲义

    5.3.2 成员变量的初始化和内存中的运行机制 128 5.3.3 局部变量的初始化和内存中的运行机制 130 5.3.4 变量的使用规则 130 5.4 隐藏和封装 132 5.4.1 理解封装 132 5.4.2 使用访问控制符 132 5.4.3 package和...

    java综合试题(面试题)

    9、两个类同在一个包中,那么在一个类可以访问另一个类的private成员变量。 ( ) 10、方法形式参数的作用域是该方法的方法体。 ( ) 8、两个类同在一个包中,那么在一个类可以访问另一个类的private成员变量。( ...

    java基础案例与开发详解案例源码全

    15.2.4 访问成员变量的值421 15.2.5 操作数组422 15.3 反射与动态代理424 15.3.1 静态代理424 15.3.2 动态代理426 15.4 本章练习427 第16章 16.1 注解概述430 16.2 JDK内置的基本注解类型430 16.2.1 重写Override430...

    Java面试宝典-经典

    27、内部类可以引用它的包含类的成员吗?有没有什么限制? 20 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 ...

Global site tag (gtag.js) - Google Analytics