`
seaizon
  • 浏览: 145149 次
  • 性别: 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基础教程----精华版

    - **类(Class)**:Java中的核心概念,是对象的模板,定义了对象的属性(成员变量)和行为(方法)。 - **对象(Object)**:类的实例,是程序中的具体实体,通过new关键字创建。 - **封装**:通过类隐藏内部...

    java继承例题

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

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

    ### 论JAVA继承机制中父类与子类的关系 #### 摘要 本文深入探讨了Java语言中的继承机制,并重点分析了父类与子类之间的关系。文章围绕子类继承父类成员的过程、成员变量及方法的赋值、重写、覆盖等问题展开讨论,...

    java类的继承详解说明

    继承是指一个类继承另一个类的成员变量和方法,使得子类可以获得父类的所有成员变量和方法,并在此基础上增加自己的成员变量和方法。继承的关键字是 extends,它表示子类继承自父类。 继承的实现 Java 中的继承是...

    Java反射访问私有变量和私有方法.doc

    代理类是 Java 语言中的一种机制,使得我们可以在运行时创建一个代理类,继承自原始类,并且可以访问原始类的非公有成员变量或方法。 优点:这种方法可以在运行时创建一个代理类,继承自原始类,非常灵活。 缺点:...

    Java设计一个银行帐户类(继承与多态)

    Java的继承机制允许一个类(如`BCOption`)继承另一个类(如`BankCount`),从而获得被继承类的所有非私有属性和方法。这里虽然没有明确的继承关系,但可以通过组合(Composition)的方式复用`BankCount`类的功能。...

    java-静态变量方法块

    在Java编程语言中,静态变量、静态方法、静态代码块以及非静态变量和非静态方法是核心概念,它们对于理解和编写Java程序至关重要。下面将详细解释这些概念,并通过实例程序来阐述它们的使用和内存管理。 首先,静态...

    Java 接口与继承

    Java中的继承和接口是面向对象编程的关键特性,它们在软件设计中扮演着至关重要的角色,实现了代码的重用和类的层次结构。 继承是Java中创建新类的一种方式,它允许一个子类(SubClass)从一个已存在的父类...

    《java面向对象程序设计-继承和多态》教案.doc

    通过实现接口,类可以拥有接口中声明的所有方法,这在单一继承机制下提供了更多的灵活性。接口还常用于定义常量,提供常量值的统一管理。 总结来说,Java的面向对象设计包括封装、继承和多态,这些特性使得代码更加...

    Java 类和继承相关代码集

    Java 类和继承是面向对象编程的核心概念,它们构成了Java程序设计的基础。在这个代码集中,我们很显然会看到一系列关于如何创建和使用Java类以及实现继承的示例代码。以下是对这些概念的详细解释: 1. **Java 类**...

    Java 实现继承实例代码

    在Java编程语言中,继承是面向对象特性之一,它允许我们创建一个类(子类或派生类)作为现有类(父类...通过学习这个实例,开发者能够更好地理解和运用Java的继承机制,从而在实际项目中实现更灵活、可扩展的代码结构。

    Java编程语言入门 Java语言基础教程 第06课 oop2 Java的面向对象编程-继承、接口、包 共37页.pdf

    - **状态和行为的继承**:子类会继承父类的所有非私有成员变量(状态)和方法(行为)。这包括父类中的公共(public)、受保护(protected)以及默认(缺省)访问级别的成员。 - **重写与新增**:子类不仅可以保留...

    大学生java实验(四)

    Java继承机制详解 Java是一种面向对象的编程语言,它支持继承机制,即一个类可以继承另一个类的特征和行为。继承机制是实现代码重用和提高开发效率的重要手段。 什么是继承? 继承是一种创建新类的机制,新类可以...

    Java基础知识面试题(2022最新版).docx

    * 类和对象的概念、类的组成部分:成员变量、构造方法、普通方法。 * 抽象类和接口的概念、抽象类和接口的区别。 继承和多态 -------------- * 继承的概念、继承的实现、继承的特点。 * 多态的概念、多态的实现、...

    java关于继承的思维导图(Xmind)

    在这个"java关于继承的思维导图(Xmind)"中,我们可以看到作者对Java继承机制的详细梳理。 1. **类的层次结构** - 在Java中,类可以看作是对象的模板,通过继承,子类可以共享父类的特性。这构建了一个类的层次结构...

    Java程序设计实用教程-电子教案-5继承与接口(ppt文档).ppt

    继承是Java语言的一种机制,允许开发者创建一个新的类,而这个新的类继承了已有的类的所有成员变量和方法。继承的好处是可以重用代码,节省时间和空间,同时也提高了代码的可读性和维护性。在Java语言中,继承是通过...

    Java的继承机制详解

    Java的继承机制是面向对象编程中的核心特性,它允许一个类(子类)从另一个类(父类)继承属性和方法,从而实现代码的复用和扩展。在Java中,继承具有以下特点: 1. 单继承:不同于C++等语言,Java仅支持单继承,即...

    Java基础精品课10-封装和继承.zip

    在Java中,我们通过访问修饰符(如private、public、protected)来控制成员变量的访问权限,实现封装。同时,getter和setter方法用于在类的外部获取或修改私有变量的值,这是Java中实现封装的常见方式。 **继承**则...

Global site tag (gtag.js) - Google Analytics