`
cakin24
  • 浏览: 1388049 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Java中的super限定

    博客分类:
  • java
阅读更多

一 super限定介绍
Java中允许通过关键字super来调用父类的方法或属性。
super不能出现在static修饰的方法中。

 

二 通过super限定访问父类的成员变量
1 代码示例

class BaseClass
{
	public int a = 5;
}
public class SubClass extends BaseClass
{
	public int a = 7;
	public void accessOwner()
	{
		System.out.println(a);
	}
	public void accessBase()
	{
		// 通过super来限定访问从父类继承得到的a实例变量
		System.out.println(super.a);         //a
	}
	public static void main(String[] args)
	{
		SubClass sc = new SubClass();
		sc.accessOwner(); // 输出7
		sc.accessBase(); // 输出5
	}
}

 2 运行结果
7
5
3 结果分析
a变量在子类和父类都定义了。当系统创建SubClass对象时,实际上为SubClass对象分配两块内存,一块用于存储在SubClass类定义的a实例变量,一块用于存储从BaseClass类继承得到的a实例变量。
a处代码通过super限定访问从父类得到的a实例变量。

 

三 子类隐藏父类定义变量的内存运行图
1 代码示例

class Parent
{
	public String tag = "父类";         //①
}
class Derived extends Parent
{
	// 定义一个私有的tag实例变量来隐藏父类的tag实例变量
	private String tag = "子类";         //②
}
public class HideTest
{
	public static void main(String[] args)
	{
		Derived d = new Derived();
		// 程序不可访问d的私有变量tag,所以下面语句将引起编译错误
		// System.out.println(d.tag);         //③
		// 将d变量显式地向上转型为Parent后,即可访问tag实例变量
		// 程序将输出:“父类”
		System.out.println(((Parent)d).tag);         //④
	}
}

 HideTest.java
2 运行结果
父类
3 结果分析



 
程序先创建一个Derived对象,这个对象保存两个tag实例变量,一个是父类的,一个是子类的,此时程序中包括一个d变量,引用了一个Derived对象,内存示意图如上。
程序在④行代码处先将d变量强制向上转为Parent类型,再通过它来访问tag实例变量是允许的,此时系统将访问1行粗体代码处定义的tag实例变量。

  • 大小: 17.3 KB
0
1
分享到:
评论

相关推荐

    Java泛型三篇文章,让你彻底理解泛型(super ,extend等区别)

    在 Java 泛型中,extends 和 super 是两个重要的关键字,它们分别用于限定类型的上界和下界。 extends 用于限定类型的上界,表示参数化类型可能是 T 或 T 的子类。例如: List<? extends Fruit> flist = new ...

    Java编程泛型限定代码分享

    Java编程泛型限定代码分享 Java编程泛型限定代码分享主要介绍了Java编程泛型限定的相关内容,具有一定参考价值,需要的朋友可以了解下。泛型一般出现在集合中,迭代器中也会出现!泛型是为了提高代码的安全性。泛型...

    java试卷及答案(1).doc

    9. Java 中访问限定符包括 public、private、protected,default 不是访问限定符。 10. 在 Java 语言中,子类中可以使用 super 关键字调用父类的构造方法。 11. 在 Java 中,子类中可以定义和其父类中同名的成员...

    清华大学《JAVA语言与面向对象程序设计》试卷及其答案.pdf

    4. Java类的基本要素:文档中涉及到了Java中的类定义、属性和方法的访问修饰符,如private、protected、public等,以及对类的继承机制的考察(如super关键字的使用)。 5. Java异常处理:文档提到了使用try-catch...

    软件工程系JAVA 试卷

    在同一个类中,可以通过`this()`来调用其他构造器,而`super()`用于调用父类的构造器。 3. `import`语句用于引入包中的类。使用`*`作为通配符表示导入包中的所有类,例如`import java.util.*;`。 4. 在Java中,...

    java实验报告5java实验报告5.doc

    在`StudentB`类的构造方法中,通过`super(newName)`调用了父类的带参数构造方法,这是Java中使用`super`关键字的典型应用。 2. **方法的覆盖**:当子类中定义了与父类同名且参数列表相同的方法时,称为方法覆盖。如...

    Java 限制子类访问的方法分析

    private关键字是Java中的访问修饰符之一,它可以用来限定某个成员变量或方法的访问权限,即只有在同一个类中,才能访问该成员变量或方法。例如,在父类中声明了一个private的成员变量,那么在子类中将无法访问该成员...

    java编程技巧典型案例解析

    - 泛型方法与泛型类:如何声明和使用,以及边界限定(如`<? extends T>`和`<? super T>`)。 - 泛型通配符:了解上界通配符、下界通配符的使用场景。 3. 集合框架 - List、Set和Queue的区别:理解各自的特点,...

    java泛型类和函数

    在这个例子中,`Map`的键值对都被限定为`String`类型,因此不需要显式地进行类型转换,这增强了代码的安全性和可读性。 #### 泛型限制 虽然泛型提供了强大的功能,但在使用时也有一些限制需要注意: - **通配符**:...

    java新手学习手册

    - 在Java中,所有数据都是通过类来组织的。类是对象的模板,对象则是类的具体实例。 - 类体中定义的变量被称为成员变量,方法体内声明的变量称为局部变量。 - 成员变量可以分为静态变量(通过`static`关键字声明...

    corejava12示例代码

    《CoreJava12示例代码》是一份针对Java编程语言深度学习的重要资源,主要涵盖了CoreJava12版本中的核心概念和特性。这份压缩包文件包含了丰富的示例代码,旨在帮助开发者深入理解Java语言的各个方面,提升编程技能。...

    Java核心技术 卷II 高级特性 原书第10版 中文版

    本书可能会深入探讨Java中的并发机制,包括但不限于以下内容: - **Thread类**:介绍如何创建和管理线程,以及如何控制线程的生命周期。 - **Runnable接口**:通过实现Runnable接口的方式创建线程,并探讨这种方式与...

    上海交大 第三学期期末 java复习题和模拟题(附答案).docx

    - **解释**:尽管题目中的选项提到构造函数不可重载,但实际上Java中的构造函数是可以重载的,这意味着可以在同一个类中定义多个同名构造函数,只要它们的参数列表不同即可。 ### 实现多重继承的效果 - **知识点**...

    Java学习笔记(包含一些容易忽视的知识点)

    在Java的学习过程中,了解并掌握一些关键的概念和特性至关重要。以下是一些重要的Java知识点,包括访问限定符、变量修饰符、嵌套类、变长参数、继承以及访问控制。 1. 访问限定符:Java提供了`public`、`private`和...

    常考的java题(很多都是面试题)

    14. **访问限定符**:Java有public、private、protected和默认四种访问权限,分别控制成员的可见范围。 15. **接口**:接口不能直接创建对象,因为接口中的方法默认是抽象的。类可以实现接口,以满足多态的需求。 ...

Global site tag (gtag.js) - Google Analytics