`
unique5945
  • 浏览: 134766 次
  • 来自: 杭州
社区版块
存档分类
最新评论

自己总结super的用法

    博客分类:
  • JAVA
阅读更多
首先是网上关于super用法的简介:

基础知识
1、super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)
2、super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时)
如:super.变量名   super.成员函数据名(实参)
3、如果父类中的成员变量和方法被定义为private类型,那么子类永远无法访问它们,如果试图采用super.var的形式去访问父类的private类型的var变量,就会导致编译错误。(如果是protected则可以)

我遇到的问题:
某程序在其构造函数中调用了super(),但却没反应,代码和原因都写在注释里了(该代码同时还测试子类在实例化时构造函数以及成员变量的实例化顺序,因此写了很多辅助类如Test2、Test3):
class Test3{
	Test3(){System.out.println("in the Test3()");}
}
class Test2{
	Test2(){System.out.println("in the Test2()");}
	void a(){}
}
class Test {
	private Test2 t2 = new Test2();
	protected Test2 t22 = new Test2();
	Test() {
		System.out.println("in the Test()");
	}
	Test(int i) {
		System.out.println("in the Test(int i)");
	}
}
public class TestConstructor extends Test{
	private Test2 t2 = new Test2();
	protected Test2 t22 = new Test2();
	/* 这里的t2、t22覆盖了父类中的t2、t22,所以要引用父类的中变量就要用super.xxx */
	private Test3 t3 = new Test3();
	TestConstructor(){
		//super(); 
		/* super()是用来调用父类默认的构造子,但子类在实例化时会自动调用父类的默认构造子,不需要显示调用,所以一般不用super(),而用super(参数)来调用带参构造子,因为带参构造子是不会在子类实例化是被调用的,必须显示调用 */
		//super(1);
		/* 这里如果写上这句话,则在实例化TestConstructor时将不再调用父类的默认构造子Test(),而是调用带参构造子Test(int) */
		//super.t2.a();    
		/* 这样写编译器会报错,因为t2是父类(Test)中的private成员 */
		super.t22.a();  
		/* 这样写就没问题,因为t22在父类中是protected的 */
		System.out.println("in the TestConstructor()");		
	}
	public static void main(String[] args) {
		Test 
		    supertest = new Test(),
		    subtest = new TestConstructor();		    
	}
}

该程序输出结果是:
in the Test2() //实例化Test类时先实例化其成员变量t2
in the Test2() //实例化Test类时先实例化其成员变量t22,注意t2和t22按声明顺序实例化
in the Test() //调用Test类的构造子
in the Test2() 
in the Test2()
in the Test() /*上面三句是前三句的重复,因为TestConstructor是Test的子类,在实例化子类时会先将父类的所有初始化工作完成,也就是先执行前三句,接下来的四句是子类自己的初始化工作*/
in the Test2() //实例化自己的成员变量t2
in the Test2() //实例化自己的成员变量t22
in the Test3() //实例化自己的成员变量t3
in the TestConstructor() //调用自己的构造子
分享到:
评论

相关推荐

    Java this super代码实例及使用方法总结

    Java this 和 super 代码实例及使用方法总结 Java 编程语言中,this 和 super 是两个非常重要的关键字,这两个关键字在面向对象编程中扮演着非常重要的角色。下面我们将详细介绍 Java 中 this 和 super 的用法。 ...

    Java super关键字使用

    本篇文章将深入探讨`super`关键字的使用方法,包括其在构造函数、方法调用以及字段访问中的应用。 ### 1. 构造函数调用 当子类继承父类时,有时候我们需要在子类的构造函数中调用父类的构造函数。Java中的`super`...

    Java中static、this、super、final用法

    ### Java中static、this、super、final用法详解 #### 一、static关键字的使用 在Java编程语言中,`static`是一个非常重要的关键字,它主要用于定义类成员(包括变量和方法),使得这些成员能够在不创建类实例的...

    javathis和super用法 this和 super 关键字的区别

    - **调用父类的方法**:在子类中通过`super`调用父类的方法,通常用于扩展或覆盖父类的行为。 - **示例代码**: ```java class Person { protected void print() { System.out.println("Name=" + this.name + ...

    SuperSocket客户端+服务端完整demo

    **SuperSocket客户端+服务端完整Demo** `SuperSocket` 是一个轻量级、高度可扩展的C#开发的网络...通过研究和实践,开发者不仅可以掌握TCP通信的基本概念,还能熟悉SuperSocket的用法,为构建自己的网络应用奠定基础。

    C# supersocket框架

    2. 数据交互:客户端可以通过发送和接收消息与服务端进行通信,SuperSocket提供了方便的数据封装和解封装方法。 3. 错误处理:SuperSocket为客户端提供了异常处理机制,可以捕获和处理连接中断、数据传输错误等问题...

    Java中this、super用法[归类].pdf

    Java 中 this 和 super 的用法 Java 中的 this 和 super 是两个重要的关键字,它们在面向对象的编程中扮演着非常重要的角色。本文将详细介绍这两个关键字的用法和意义。 this 关键字 在 Java 中,this 通常指当前...

    java中this/super用法

    `DemoSuper` 类继承自 `Person` 类,它重写了 `print` 方法,并使用 `super.print()` 来调用父类的 `print` 方法。这显示了如何在子类中保留并使用父类的行为。 总结来说,`this` 和 `super` 是 Java 中的关键字,...

    Java中this、super用法.pdf

    当你在子类中需要调用父类的方法或访问父类的属性时,可以使用`super`关键字。例如,在`DemoSuper`类中,`super.print()`调用了父类`Person`的`print`方法。这种方式在子类覆盖了父类方法时特别有用,可以让子类先...

    SuperCSV-1.52

    文件列表中的"SuperCSV-1.52.jar"是主要的库文件,包含了所有的类和方法。 ### 4. 示例 - **读取CSV**:使用`CsvReader`类,你可以逐行读取CSV文件,通过CellProcessor处理每个单元格的数据。 - **写入CSV**:使用`...

    SuperSU-v2.82.zip

    在SuperSU中,这份文件可能包含了root过程、恢复模式安装方法以及如何更新或卸载SuperSU的说明。 3. **arm_tools**、**arm64**、**x86**、**common**、**mips64**、**x64**、**arm**:这些目录代表了不同处理器架构...

    1.java中super关键字的应用

    在`Child`类的`printMessage`方法中,`super.printMessage()`首先调用了`Parent`的`printMessage`方法,然后执行子类自己的逻辑。 总结起来,`super`关键字在Java中扮演着连接子类和父类的关键角色,它使得我们可以...

    DelphiXe10 Json解析类(SuperObject)

    总结来说,SuperObject为Delphi XE10提供了强大而易用的JSON解析和序列化功能。通过灵活的API,开发者可以轻松地处理JSON数据,无论是解析来自网络的响应,还是构建用于发送的数据。尽管官方支持可能停留在XE7,但...

    SuperSocket_demo

    它包含了一个完整的服务器端和可能的客户端示例,用于展示如何使用SuperSocket开发网络应用。通过这个DEMO,你可以学习到如何配置服务端,如何处理客户端连接,以及如何发送和接收数据。示例代码通常会包含以下几个...

    Java中super的几种用法并与this的区别

    如果子类重写了父类的方法,但仍然需要调用父类的实现,可以使用`super`关键字。这里需要注意,`super`不能用于调用非覆盖的父类方法,只能用于访问已被覆盖的父类方法。例如: ```java class Country { String ...

    superobject.zip

    1. `superobject.pas`:这是SuperObject的核心文件,包含了所有与JSON处理相关的类和方法。如`ISOContainer`是基础容器类,可以表示JSON的数组和对象;`ISOObject`则用于表示JSON对象;`ISOStringList`则用于处理...

    SuperSocket测试Demo

    总结来说,“SuperSocket测试Demo”是一个学习和实践SuperSocket的绝佳起点,它可以帮助开发者快速理解和掌握SuperSocket的基本用法,为构建高性能、可扩展的TCP网络应用打下坚实基础。在实际开发过程中,建议参考...

    superObject.rar

    本篇文章将深入探讨SuperObject在DelphiXE8中的使用方法、核心功能以及实际应用场景。 一、SuperObject简介 SuperObject是用纯Delphi编写的一个JSON库,它支持Delphi 2009及以上版本,包括64位平台。其设计目标是...

Global site tag (gtag.js) - Google Analytics