A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余海龙 黑马帝   /  2012-1-10 20:06  /  4435 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余海龙 于 2012-2-2 13:40 编辑

学哥学姐们,帮我解决一下这个问题吧,尽量讲的具体点儿,谢谢!{:soso_e183:}

11 个回复

正序浏览
看了各位的分析,已经明白了,谢谢!super指向父类对象,而静态优先于对象存在。{:soso_e183:}
回复 使用道具 举报
曾辉 黑马帝 2012-1-12 13:59:07
11#
静态方法方法属于类里面只能调用静态方法

this和super调用的都是对象的普通方法,估不能出现在静态方法中

this和super是需要对象才可以调用的,静态方法是属于类的,没有实例化的对象

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
大梅 黑马帝 2012-1-11 13:26:56
10#
static修饰成分是优先于对象存在的,而this跟super是相对于对象而存在的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
王杰 黑马帝 2012-1-11 13:20:45
9#
因为super与当前的对象有关。。。
回复 使用道具 举报
zl918 黑马帝 2012-1-11 12:50:30
8#
首先你要明白对象和类的区别。
this和super是属于对象范畴的东西,而静态方法是属于类范畴的东西
所有的成员方法,都有一个默认的的参数this(即使是无参的方法),只要是成员方法,编译器就会给你加上this这个参数如:
Class A中
void method1(){}实际上是这样的--------> void method1(A this)
void method2(int x){}实际上是这样的--------> void method2(A this, int x)
而静态方法与对象无关,根本不能把对象的引用传到方法中,所以不能用this

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
代臣 黑马帝 2012-1-11 12:28:16
7#
本帖最后由 代臣 于 2012-1-11 12:36 编辑

在问题之前先讲super的用法:
1.super的用法跟this类似,this代表对本类对象的引用,指向本类已经创建的对象;而super代表对父类对象的引用,指向父类对象;
2.静态优先于对象存在;
3.由上面的1.和2.知:
因为静态优先于对象存在,所以方法被静态修饰之后方法先存在,而方法里面要用到super指向的父类对象,但是所需的父类引用对象晚于该方法出现,也就是super所指向的对象没有,当然就会出错。
综上,静态方法中不可以出现super关键字。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
super:是操作当前此对象的父类中的对象,而静态方法是和整个类有关,和对象没有关系!
回复 使用道具 举报
静态方法它不属于单独的某个对象,他只和类有联系,也就是说静态方法成功加载后,对象还不一定存在,而super关键字它指的是当前对象的引用,所以在静态方法中不能出现super关键字

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
SUPER是孩子去找父母,但是连孩子都不存在,你怎么去找父母。
回复 使用道具 举报
静态方法是不用实例化的:
而SUPER()是针对父类的引用
1,调用父类构造函数
2,引用父类(超类)的成员变量和方法

所以在静态方法中不能出现。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
静态方法是不用创建对象实例就可能通过类名直接访问的"类名.方法名",super 和 this 都是针对对象实例的.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马