java 小弟很多不明白,请各位高手指教

来源:百度知道 编辑:UC知道 时间:2024/09/24 16:23:56
public class Text
{
public static void main(String[] agrs)
{
SubCalc sc = new SubCalc();
System.out.println(sc.multiply(3, 4));
System.out.println(SubCalc.multiply(2, 2));
}
}
class SuperCaic
{
//public static int c=10;
protected static int multiply(int a,int b){return a*b;}
}

class SubCalc extends SuperCaic
{
//public int c=10;
//SubCalc() { super.multiply(a, b); }
public static int multiply(int a,int b)
{
//int c = 0;
//return c+a+b;
//int c = 1;
//return a + b+c;
int c=super.multiply(a,b);
return c;
}
}
super.multiply(a,b);为什么会错误呢?super.multiply(a,b)这个东西返回的是静态的还是非静态的呢;如果我把父类和子类函数的静态关键字都去除了就可以运行,为什么呢?请各位高手多多指教,小弟万分感激

错误提示:
Cannot use super in a static context

意思便是不能用super调用静态的上下文,比如静态方法和静态成员变量

super可以调用的是父类的成员函数(即非静态的)和成员变量(即非静态的),需要调用父类的类函数和类变量则需要用父类名调用.

结合到楼主的例子里
int c=super.multiply(a,b);
应该为
int c=SuperCaic.multiply(a,b);

有static的方法又称为“类方法”
楼主记住一句话:类方法只能访问类数据成员和类方法,不能访问非数据成员和方法,且:类方法不能被覆盖,(即这个类的子类不能有同名,相同的参数的方法)

SubCalc() { super.multiply(a, b); }
你的构造函数不是类方法

public static int multiply(int a,int b)
{
//int c = 0;
//return c+a+b;
//int c = 1;
//return a + b+c;
int c=super.multiply(a,b);
return c;
}
这段code可不写,
因为class SubCalc extends SuperCaic是继承关系
SubCale可以调用SuperCaic的一切方法,并且
父类中protected static int multiply()方法是类方法,因此子类不需实例化就能调用此方法

静态方法是存放在常量区的。
super,this是必须在实例化对象以后才有,存放在堆区。所以调用不到。