黑马程序员技术交流社区
标题:
子类中调用父类静态变量的问题
[打印本页]
作者:
吴扬
时间:
2012-6-30 12:00
标题:
子类中调用父类静态变量的问题
B类继承A类,B类中methodB方法调用了父类中的静态变量,但是报错了,看代码:
父类:
public class ClassA {
static int i = 4;
public void methodA()
{
System.out.println(i);
}
}
复制代码
子类:
public class ClassB extends ClassA{
static int i = 5;
public static void methodB()
{
super.i = 3;//报错内容:“静态上下文不能使用super关键字”,为什么静态方法中不能使用super关键字调用父类的静态变量?
System.out.println(i + "..." +super.i);//
}
}
复制代码
作者:
马林康
时间:
2012-6-30 12:01
静态不能使用this 和super关键字
作者:
黑马刘洋
时间:
2012-6-30 12:04
因为静态是“不属于”类的,它不在堆内存中,在一片独立的内存内,因而不能被继承。
因为不属于某个类,所以在静态方法中不能调用this super因为它没有所属类,同样也不会有对应父类中的静态成员。
作者:
余清兰
时间:
2012-6-30 12:52
静态里是不能用this或super关键字的,因为静态是随着类的加载就已经存在于内存中了,而this和super是指的一个对象,创建了对象才会存在于内存中,也就是说一个先来后到的原理,
被static修饰的成员变量,是属于某个类的,都可以直接用类名.变量名调用,不能用super。你的代码可以这样写,把父类和子类的i值都打印出来
class ClassA {
static int i = 4;
public void methodA()
{
System.out.println(i);
}
}
class ClassB extends ClassA{
static int i = 5;
public static void methodB()
{
//super.i = 3;//报错内容:“静态上下文不能使用super关键字”,为什么静态方法中不能使用super关键字调用父类的静态变量?
System.out.println("子类的值"+i + "..." +"父类的值"+ClassA.i);
}
}
class wentiDemo
{
public static void main(String[] args)
{
ClassB.methodB();
}
}
复制代码
作者:
尹善波
时间:
2012-6-30 14:57
静态方法中不允许访问类的非静态成员,包括成员的变量和方法,因为此时是通过类调用的,没有对象的概念。This,super是不可用的。
一般情况下,主方法是静态方法,所以可调用静态方法,主方法为静态方法是因为它是整个软件系统的入口,而进入入口时系统中没有任何对象,只能使用类调用。
覆盖不适用于静态方法。
静态方法不可被覆盖。(允许在子类中定义同名静态方法,但是没有多态,严格的讲,方法间没有多态就不能称为覆盖)
作者:
汪璨
时间:
2012-6-30 15:22
1,在静态成员和方法中是不能使用this预定义对象引用的,因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,
静态成员和方法成功加载后,对象还不一定存在。
2.super的用法跟this类似,this代表对本类对象的引用,指向本类已经创建的对象,而super代表对父类对象的引用,指向父类对象,
静态优先于对象存在。
因为静态优先于对象存在,所以成员和方法被静态修饰之后方法先存在,而方法里面要用到super指向的父类对象,但是所需的父类引用对象晚于该方法出现,
也就是super所指向的对象没有,当然就会出错。
所以说static修饰了成员和方法后,不能用this和super关键字。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2