当前位置:编程学习 > JAVA >>

请java大神帮帮忙。。

package simple;

public class test1 {
static int x=100;
static void m(){
System.out.println(x);

}
}
class test2 extends test1{
static  int x=200;
 static void m(){
System.out.println("x="+x);
System.out.println("super.x="+super.x);//出错了
super.m();// 出错了
}
public static void main(String args[]){
//test1 a=new test1()
  test1 a=new test2();
  a.m();
  System.out.println(a.x);
}
}
为什么不能调用父类的方法跟属性了? java --------------------编程问答-------------------- static   这些去掉。 --------------------编程问答-------------------- 声明为static的方法有以下几条限制:

  1、它们仅能调用其他的static 方法。

  2、它们只能访问static数据。

  3、static方法内不能有this,super关键字 --------------------编程问答-------------------- 难道楼主的结果不是打印  100??
要不楼主再去试试!

这个不是调不调用父类属性和方法的问题,楼主的属性和方法都是static,也就是静态的,静态的属性和方法是属于类的,而不是属于方法的,所以楼主调用  a.m()和输出a.x都是应该是用a这个类的方法和属性,虽然a这个类是用子类new出来的,但是a的类本身还是属于父类的,所以a.m()和a.x结果都应该是父类的方法和属性,也就是100

以上纯属一个观点,谢谢! --------------------编程问答-------------------- 还有楼主的代码很明显会报错的,不信自己去试试! --------------------编程问答-------------------- http://bbs.csdn.net/topics/290050251
自己看下吧 --------------------编程问答-------------------- static 的变量和方法用
类名.
调用

如:
public static void main(String args[]){
  System.out.println(test1.x);
  test1.m();
}

如果是测试成员变量,把static去掉。

ps:类名首字母大写
--------------------编程问答-------------------- 静态方法中不能出现this(当前对象的引用)或super(父类对象的引用),
静态方法又叫类方法,用于维护静态属性(即类属性),类属性在类中只有一份。

若想在静态方法中使用当前类的静态属性(如x),只需要写静态属性名即可,例如:
System.out.println(x); 
也可以写成
System.out.println(Test2.x);

若想在静态方法中使用父类的静态属性,只需要写“父类名.静态属性名”即可,例如:
System.out.println(Test1.x);

希望我的回答能帮到你~ --------------------编程问答-------------------- 静态方法和变量是直属于类的,不能通过对象调用。 如果想要调用父类的方法和变量,你这样写继承没有意义。 --------------------编程问答-------------------- 可能是static的原因。 --------------------编程问答-------------------- 你的x被静态修饰,静态变量随着类的加载而加载,是先于对象存在的。System.out.println("super.x="+super.x);//出错了
这语句需要在建立对象后才能执行,而"super.x="+super.x中的x是静态,先于对象存在,在这里肯定不能用。
2.还有引用楼上那位的一句话,static方法内不能有this,super关键字。道理也是静态修饰的成员变量或成员方法,先于对象存在,super和this关键字是有了对象才能用。当类初始化时,静态修饰的成员变量或成员方法跟随着加载,可这个时候还没建立对象,你把super和this放在那里,肯定识别不了。
希望对你有帮助 --------------------编程问答-------------------- 楼主刚学java吧? --------------------编程问答-------------------- static 是共有的,不用你new一个对象再去调用 --------------------编程问答-------------------- 不用super 指点类名点就可以用
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,