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

自己总结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() //调用自己的构造子
分享到:
评论

相关推荐

    C#SuperSocket的搭建并配置启动总结

    之前我们借助一个SuperSocket实现了一个简易版的服务器, 但是不管是Server还是Session都是使用框架的,本篇博客我们要实现自己的Server和Session,来重写框架原生的Server或Session的方法,或添加自己所需的属性,来实现...

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

    主要介绍了Java this super代码实例及使用方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java关键字总结

    员,使用方法是this.成员名,而不带this 的那个便是刑参。另外,还可 以用this.方法名来引用当前对象的某个方法,但这时this 就不是必须的 了,你可以直接用方法名来访问那个方法。 2>当父类的方法被重写后可以用 ...

    ugui-super-scrollview-example:概述“ UGUI Super ScrollView”用法示例的示例项目

    样本项目总结了“ UGUI Super ScrollView”的用法示例。 版 Unity 2017.3.0f3 UGUI超级ScrollView 2.2.3 警告 该存储库不包括“ UGUI Super ScrollView”。 因此,如果您要运行Unity项目, 您需要从Asset Store...

    Java面向对象总结

    1.子类继承父类就拥有了父类的属性和方法。(代码的可重用) !!!父类的构造方法子类不能继承 2.在JAVA中使用关键字extends ...使用super(参数列表),但是这行代码必须是在 子类的构造方法的第一行。

    Python类的继承super相关原理解析

    super()是一种将子类与父类联系起来的一种方法,子类通过继承父类,可以使用父类的方法和属性,也可以自己定义属于自己的方法和属性。super方法主要用在多继承中,在单继承时直接调用父类方法即可 下面这个是SGD源码...

    Java 基础核心总结 +经典算法大全.rar

    null 只是-种特殊的值使用 Null-Safe 方法null 判断 关于思维导图 Java.IO Java.lang Java.math Java.net Java 基础核心总结 V2.0 IO 传统的 BIO BIO NIO 和 AIO 的区别什么是流 流的分类 节点流和处理流 Java ...

    Super-JavaGuide:基于JavaGuide和个人面试经验做出的总结

    Super-JAVA-Guide 写在前面 本项目适用于短时间备战校招使用 如果有充足的时间,建议阅读每个技术相关的书籍,夯实计算机基础 知识点需要相互连接起来成知识网 看源码是最简洁明了解决问题的方法 关于本项目 大部分...

    JAVA基础知识精华总结 收藏

    JAVA基础知识精华总结 收藏 1、 对象的初始化 (1) 非静态对象的初始化 在创建对象时,对象所在类的所有数据成员会首先进行初始化。 基本类型:int型,初始化为0。 如果为对象:这些对象会按顺序初始化。 ※在...

    javaSE整体学习总结,超级全面

    JDK的主要包,import(导入类),package(包机制),继承(extends)使用要点,implements,方法的重写(override),final(关键字)使用,instanceof(关键字),组合的核心,super本质是什么,封装(encapsulation),封装的简单规则,访问...

    python多线程用法实例详解

    今天在学习尝试学习python多线程的时候,突然发现自己一直对super的用法不是很清楚,所以先总结一些遇到的问题。当我尝试编写下面的代码的时候: 复制代码 代码如下:class A():  def __init__( self ):  print “A...

    java 面试题 总结

    最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概...

    Android代码-SuperTextView

    > SuperTextView是一个功能强大的View,可以满足日常大部分布局样式,开发者可已自行组合属性配置出属于自己风格的样式!可能描述起来没有概念,还是直接看效果图吧! > 简化版 CommonTextView只是逻辑简化,其实功能...

    Java中一些关键字的使用技巧总结

    主要介绍了Java中一些关键字的使用技巧总结,其中重点讲述了this和super两个关键字的用法,需要的朋友可以参考下

    自己动手写操作系统(含源代码).part2

    很可能读者比我更聪明,有更好的解决问题的方法,但无论如何,我认为我自己的经验可以为读者所借鉴。如果真是如 此,我将会非常欣慰。 在第二版的编写过程中,我同样要感谢许多人。感谢我的父母和爷爷对我的爱,并...

    Java语言基础下载

    构造方法在继承中的使用 96 super关键字 97 包装类 97 toString( )方法 100 内容总结 101 独立实践 102 第七章:类的高级特征 103 学习目标 103 static关键字 104 final关键字 106 内部类 106 实例分析 110 抽象类,...

    Java——static关键字总结(含义、定义属性或方法、使用时机)

    目录 1、声明static属性 2、声明static方法 3、分析主方法 3、static应用案例 1、声明static属性 static关键字,主要描述全局的概念,利用该... super.onCreate(savedInstanceState); Person perA = new Person(张三,1

    Think in ActionScript 3.0Ⅰ Ⅱ Ⅲ汇总

    6.5 接口用法总结 6.6 TestInterFacePoly.as —— 接口实现多态 6.7 策略模式(Strategy Pattern) 7.浅谈设计模式 8.面向对象程序设计 8.1 类和对象的概念 8.2 类之间的关系 8.3 面向对象程序设计(OOP) 8.4 出圈...

    自己动手写操作系统(含源代码).part1

    很可能读者比我更聪明,有更好的解决问题的方法,但无论如何,我认为我自己的经验可以为读者所借鉴。如果真是如 此,我将会非常欣慰。 在第二版的编写过程中,我同样要感谢许多人。感谢我的父母和爷爷对我的爱,并...

    LED驱动实验

    当然最好的方法是动态分配设备号,如果使用这种方法,在/dev 目录下为 LED 设备建立设备节点的时候,需要先从/proc/devices 文件中获取该设备的主设备号。在驱动程序中还要实现与 LED 相应的 I/O 配置,以及读写设备...

Global site tag (gtag.js) - Google Analytics