`
seaizon
  • 浏览: 139439 次
  • 性别: 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继承例题

    Java继承机制详解 Java继承是面向对象编程(OOP)的一种机制,允许一个类继承另一个类的成员变量和成员方法。通过继承,可以实现代码的重用和扩展。 在Java中,继承是通过使用关键字`extends`来实现的。例如,`...

    java继承和多态PPT教案学习.pptx

    继承是面向对象编程的基本机制之一,允许一个类继承另一个类的成员变量和方法。Java中,继承是通过extends关键字实现的。子类可以继承父类的成员变量和方法,并可以添加新的成员变量和方法或覆盖父类的方法。 在...

    java类的封装实验报告.pdf

    本实验报告主要介绍了Java类的封装机制,包括类的声明和定义、静态成员和非静态成员变量的区别、基本参数和引用参数的区别、类构造方法的编写、类的方法实现、创建类实例的方法、继承类的定义和使用、方法的重新定义...

    java继承接口与泛型PPT教案学习.pptx

    Java 语言中的继承是指一个类继承另一个类的所有成员变量和方法。子类继承父类的成员变量和方法,并可以添加新的成员变量和方法。继承的优点是可以重用代码,减少代码冗余。 在 Java 中,继承使用关键字 `extends` ...

    南邮java实验二类继承.doc

    4. 掌握派生类的定义:在 Java 中,派生类是从父类继承来的类,我们可以在派生类中添加新的成员变量和成员方法,也可以重写父类的成员方法。 二、实验环境 实验环境包括每位学生配备一台电脑,电脑需安装好 JDK 和...

    java基础第七章内部类与异常类.doc

    内部类和外嵌类之间存在着紧密的关系:内部类可以访问外嵌类的成员变量和方法,而外嵌类也可以使用内部类声明的对象作为其成员。内部类的类体中不能声明静态成员变量和静态方法。 匿名类是一种特殊的内部类,它可以...

    java课件06Java的继承与多态.ppt

    Java继承和多态 Java中的继承和多态是面向对象程序设计的两个重要特性。继承是一种由已有的类创建新类的机制,通过继承,可以先创建一个公有属性的一般类,然后根据一般类再创建一个具有特殊属性的新类。新类继承...

    求最大公约数最小公倍数的java程序类的继承.doc

    本文将从Java编程的角度,总结最大公约数和最小公倍数的计算方法,并探讨Java中类的继承机制。在这个实验中,我们将编写一个Parent类,包含一个计算最大公约数的方法f(int a, int b),然后编写一个Child类,继承自...

    JAVA基础--复习笔记.pdf

    继承是JAVA中的一种机制,允许一个类继承另一个类的成员变量和方法。 * 继承的优点:代码重用、提高代码的可维护性 * 继承的方式:单继承、多继承 四、多态性 多态性是JAVA中的一种机制,允许对象以不同的形式...

    JAVA类与对象及数组习题.pdf

    解释:在 Java 中,private 修饰符可以使得成员变量只能被当前类访问,而 public 修饰符可以使得成员变量被所有类访问。 10. 正确的语句是()A.t.f 解释:在 Java 中,使用点号可以访问对象的成员变量。 11. ...

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

    Java 中的继承是指一个类可以继承另一个类的属性和方法,这样可以实现代码的复用和提高开发效率。在 Java 中,继承使用关键字 `extends` 来实现。 Java 中继承的注意事项: 1. 重写(也叫覆盖,也叫重构):重写...

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

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

    JAVA面向对象编程.pdf

    在 Java 中,类的成员变量是类的属性,用于存储数据。成员方法是类的行为,用于操作成员变量。例如,在实验题 1 中,pi 和 radius 是 CCircle 类的成员变量,而 setCircle 和 getRadius 是其成员方法。 5. 设计类 ...

    java面向对象教程PPT教案学习.pptx

    2. 继承性:Java面向对象编程支持继承机制,允许一个类继承另一个类的成员变量和方法,提高代码的复用性。 3. 多态性:Java面向对象编程支持多态机制,允许一个类的对象可以被视为其父类的对象,提高代码的灵活性。 ...

    学习Java程序入门-面向对象之封装,继承,多态(下).docx

    * 一个子类只能继承一个父类,这是 Java 的单继承机制。 * 子类可以继承父类的所有成员,但不能直接访问父类的私有成员。 * 子类可以修改或增加新的成员,使之更适合特殊的需要。 三、多态 多态是面向对象编程的第...

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

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

    Java方法继承、方法重载、方法覆盖小结.doc

    方法继承是 Java 编程语言的一种机制,允许一个类继承另一个类的属性和方法。使用 `extends` 关键字,可以继承一个类的所有公有、保护和默认级别的变量和方法。如果子类和基类在同一个包中,子类可以继承基类中的...

    继承和接口和java访问权限修饰符总结.doc

    继承的特点是:子类可以继承父类的所有成员变量和方法,并且可以对父类的方法进行重写或重载。 二、方法重载和方法重写 方法重载是指在同一个类中定义了两个以上的同名的方法,但是它们拥有不同的参数列表。方法...

    基于JAVA的搜索引擎 lucene-2.2.0

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

    Java面向对象编程上机练习题.doc

    本文档提供了多个Java面向对象编程的练习题,涵盖了类的成员变量、构造方法、方法、继承、多态、封装等重要概念。通过这些练习题,开发者可以熟悉Java语言的面向对象编程机制,提高编程能力。 一、类的成员变量 在...

Global site tag (gtag.js) - Google Analytics