黑马程序员技术交流社区
标题:
静态和super的问题
[打印本页]
作者:
yangfengxiao
时间:
2012-9-29 11:03
标题:
静态和super的问题
本帖最后由 yangfengxiao 于 2012-9-29 17:13 编辑
class Fu {
public static void print(){
System.out.println("hah");
}
}
class Zi extends Fu {
public static void show(){
super.print();[color=Red]//为什么静态方法中不能出现super关键字[/color]
}
}
复制代码
作者:
y510662669
时间:
2012-9-29 11:14
static是静态的,它在内存中应该是存在代码区,当一个类被加载时,若类内有静态方法,它会率先执行静态方法,后执行此类的构造方法new出对象,也就是说静态方法是属于此类的。既静态方法里面只能调用静态的方法和属性。不能调用实例方法和实例变量。
因为super这个关键字是操作当前此对象中的父类中的对象,既是针对于对象的,所以不能在静态方法里面使用!
作者:
王玉岩
时间:
2012-9-29 11:23
class Zi extends Fu {
public static void show(){
super.print();
//静态是属于类的,,随着类的加载而加载,而且在内在中存放的位置也不一样,而this和super关键字是代表对象的,
//
所以在静态方法中不能出现this和super这两个关键字
}
作者:
孔肖
时间:
2012-9-29 11:23
首先,要弄清static、this和super的定义和作用。
被static修饰的成员(包括成员变量,成员方法等)都是随着类的加载而优先于对象存在的,也就是说类只要加载完成,它就已经存在了,而这时可能对象还没有建立。
this和super都代表的是对象的引用,this代表本类对象的引用,super代表父类对象的引用,而被static修饰是优先于对象存在,对象还没有呢,怎么可能去引用呢。
所以,在static修饰的方法中,是不能出现this和super这样的对象引用关键字的。
作者:
胡斌
时间:
2012-9-29 11:24
注意super使用的3种情况:1.使用super调用超类的构造方法,参见多层继承中的构造方法的调用顺序。2.使用super调用超类被子类覆盖的方法。3.使用super访问超类被子类隐藏的成员变量。
而关于你的题,你可以看看super的使用三种情况,你的方法没有被子类覆盖,故不能用super。而应该这样调用。
example:
class Fu {
public static void print(){
System.out.println("hah");
}
}
class Zi extends Fu {
public static void show(){
print();//为什么静态方法中不能出现super关键字
}
}
public class mele{
public static void main(String[] args)
{
Zi z=new Zi();
z.show();
}
}
作者:
翁鹏
时间:
2012-9-29 11:52
本帖最后由 翁鹏 于 2012-9-29 13:01 编辑
this,super,static三关键字是互斥的。
前面有人说super是直接超类的引用,我发表一下自己的看法,和大家交流一下。
我认为super不是一个对象的引用,不能将super赋给另一个对象变量,它只是一个指示编译器调用超类方法的特有关键字。
所以,super和this还是有点区别的。
作者:
李润根
时间:
2012-9-29 12:20
super和this都是对象的关键字
静态方法不用new就已经存在了,所以在静态方法不能使用
作者:
陈虹旭
时间:
2012-9-29 12:54
static: 随着类的加载进方法区,而且是优先于对象而存在的
this、super:是当前类、超类的引用,主要是默认存在于栈内存中的引用变量,它会在new出对象的时候指向堆内存中的对象
在这个过程中,static的加载顺序是优先于this、和super的,也就是说static方法存在的时候对象还没有被加载,this、super又代表对象的引用,对象不存在,静态方法是根本不可以能调用对象的。
而且从存放共有数据和特有数据来说也不对:static方法中不能定义对象的特有数据,而this.成员和super.成员都是对象的特有数据,一个在方法区中,一个在堆内存中,这样是不符合的,static只能调用static,也就是静态方法只能调用静态成员。
这是我个人的见解,有不对的地方请谅解,希望对你有帮助!
作者:
刘进朝
时间:
2012-9-29 17:01
静态方法方法属于类里面只能调用静态方法
super调用的都是对象的普通方法,估不能出现在静态方法中
super是需要对象才可以调用的,静态方法是属于类的,没有实例化的对象
作者:
尤洋
时间:
2012-9-29 18:31
super 属于对象引用
静态 优先于对象而存在
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2