Android中this、super的区别
来源:互联网 发布:广联达计价对比软件 编辑:程序博客网 时间:2024/05/21 03:24
在Java中,this通常指当前对象,super则指父类的。当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个构造函数,这些马上就要讨论。如果你想引用父类的某种东西,则非 super莫属。由于this与super有如此相似的一些特性和与生俱来的某种关系,所以我们在这一块儿来讨论,希望能帮助你区分和掌握它们两个。
在一般方法中
最普遍的情况就是,在你的方法中的某个形参名与当前对象的某个成员有相同的名字,这时为了不至于混淆,你便需要明确使用this关键字来指明你要使用某个成员,使用方法是“this.成员名”,而不带this的那个便是形参。另外,还可以用“this.方法名”来引用当前对象的某个方法,但这时this 就不是必须的了,你可以直接用方法名来访问那个方法,编译器会知道你要调用的是那一个。下面的代码演示了上面的用法:
- public class DemoThis{
- private String name;
- private int age;
- DemoThis(String name,int age){
- setName(name); //你可以加上this来调用方法,像这样:this.setName(name);但这并不是必须的
- setAge(age);
- this.print();
- }
- public void setName(String name){
- this.name=name;//此处必须指明你要引用成员变量
- }
- public void setAge(int age){
- this.age=age;
- }
- public void print(){
- System.out.println("Name="+name+" Age="+age);//在此行中并不需要用this,因为没有会导致混淆的东西
- }
- public static void main(String[] args){
- DemoThis dt=new DemoThis("Kevin","22");
- }
- }
这段代码很简单,不用解释你也应该能看明白。在构造函数中你看到用this.print(),你完全可以用print()来代替它,两者效果一样。下面我们修改这个程序,来演示super的用法。
- class Person{
- public int c;
- private String name;
- private int age;
- protected void setName(String name){
- this.name=name;
- }
- protected void setAge(int age){
- this.age=age;
- }
- protected void print(){
- System.out.println("Name="+name+" Age="+age);
- }
- }
- public class DemoSuper extends Person{
- public void print(){
- System.out.println("DemoSuper:");
- super.print();
- }
- public static void main(String[] args){
- DemoSuper ds=new DemoSuper();
- ds.setName("kevin");
- ds.setAge(22);
- ds.print();
- }
- }
在DemoSuper中,重新定义的print方法覆写了父类的print方法,它首先做一些自己的事情,然后调用父类的那个被覆写了的方法。输出结果说明了这一点:
DemoSuper:
Name=kevin Age=22
这样的使用方法是比较常用的。另外如果父类的成员可以被子类访问,那你可以像使用this一样使用它,用“super.父类中的成员名”的方式,但常常你并不是这样来访问父类中的成员名的。
在构造函数中
构造函数是一种特殊的方法,在对象初始化的时候自动调用。在构造函数中,this和super也有上面说的种种使用方式,并且它还有特殊的地方,请看下面的例子:
- class Person{
- public static void prt(String s){
- System.out.println(s);
- }
- Person(){
- prt("A Person.");
- }
- Person(String name){
- prt("A person name is:"+name);
- }
- }
- public class Chinese extends Person{
- Chinese(){
- super(); //调用父类构造函数(1)
- prt("A chinese.");//(4)
- }
- Chinese(String name){
- super(name);//调用父类具有相同形参的构造函数(2)
- prt("his name is:"+name);
- }
- Chinese(String name,int age){
- this(name);//调用当前具有相同形参的构造函数(3)
- prt("his age is:"+age);
- }
- public static void main(String[] args){
- Chinese cn=new Chinese();
- cn=new Chinese("kevin");
- cn=new Chinese("kevin",22);
- }
- }
在这段程序中,this和super不再是像以前那样用“.”连接一个方法或成员,而是直接在其后跟上适当的参数,因此它的意义也就有了变化。 super后加参数的是用来调用父类中具有相同形式的构造函数,如1和2处。this后加参数则调用的是当前具有相同参数的构造函数,如3处。当然,在 Chinese的各个重载构造函数中,this和super在一般方法中的各种用法也仍可使用,比如4处,你可以将它替换为“this.prt”(因为它继承了父类中的那个方法)或者是“super.prt”(因为它是父类中的方法且可被子类访问),它照样可以正确运行。但这样似乎就有点画蛇添足的味道了。
最后,写了这么多,如果你能对“this通常指代当前对象,super通常指代父类”这句话牢记在心,那么本篇便达到了目的,其它的你自会在以后的编程实践当中慢慢体会、掌握。另外关于本篇中提到的继承,请参阅相关Java教程
0
上一篇:应用程序单独启动
下一篇:no applicable items eclipse
相关热门文章
- app开发需要多少钱
- 【Android体系】Android基础知...
- 深层次探讨mutex与semaphore之...
- 深层次探讨mutex与semaphore之...
- 深层次探讨mutex与semaphore之...
- Android之开发环境搭建
- Android自定义View的实现...
- AndroidManifest.xml配置文件...
- Android相对布局+圆角按钮+Sha...
- 查看Android应用包名package和...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- Android中this、super的区别
- Android中this、super的区别
- Android中this、super的区别
- Android中this、super的区别
- Android中this、super的区别
- Android中this、super的区别
- Android中this、super的区别
- Android中this、super的区别
- Android中this、super的区别
- Android中this、super的区别
- Android中this、super的区别
- Android中this、super的区别
- Android中this、super的区别
- Android中This、super、getApplicationContext()、getApplication()之间的区别
- android super this区别
- java中super()与this()的区别
- java中 this 与 super 的区别
- java中super()与this()的区别
- android meta-data 应用详解
- 关于软件安全性测试
- Intent 和 Intent Filter
- 应用程序单独启动
- Delphi线程同步(临界区、互斥、信号量)
- Android中this、super的区别
- no applicable items eclipse
- 桥接模式(Bridge )-设计模式(七)
- 如何在线查看某个地方的高程值
- 其他信息: 线程间操作无效: 从不是创建控件“stateLabel”的线程访问它。解决办法
- app_name is not translate
- 动态的Json数据和静态的Json数据
- mac系统下按住mysql-python
- +id/image, already defined earlier in this layout
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
巨的组词有哪些
巨的组词是什么
巨细胞瘤
巨细胞病毒抗体
腱鞘巨细胞瘤
巨细胞
巨幼细胞
巨核细胞
新生儿巨细胞病毒感染
巨细胞病毒病
女性患上巨细胞病毒主要原因
巨噬细胞图片
巨细胞病毒症状
巨噬细胞的功能
巨细胞病毒是怎么感染的
巨细胞病毒怎么感染的
巨幼细胞性贫血的表现
孕妇巨细胞阳性
颅骨巨细胞瘤
巨细胞病毒感染途径
婴儿巨细胞病毒感染
巨细胞病毒感染严重吗
巨细胞病毒感染症状
病毒感染的症状
女生为什么会感染巨细胞病毒
巨结肠宝宝会放屁吗
中毒性巨结肠
先天性巨结肠症状
巨结肠医院
先天性巨结肠分类
什么是巨结肠
巨结肠如何检查
巨结肠有什么症状
巨结肠术后注意事项
巨结肠的大便图示
巨结肠宝宝的大便图片
先天性巨结肠的原因
儿童特发性巨结肠确诊
先天性巨结肠病因
巨结肠的症状
巨结肠宝宝便粪是什么样