今天看到一道题说实例方法可以直接调用什么?
题目如下:
为了解答这道题:写个程序看一下:
package com.wjy.test;
public class Father {
public static void publicStaticMethod(){
System.out.println("yes");
}
private static void privateStaticMethod(){
}
public void publicInstanceMethod(){
System.out.println("yes");
}
private void privateInstanceMethod(){
}
}
package com.wjy.test;
public class Son {
private static void print(){
System.err.println("I am class method.");
}
public void invokeClassMethod(){
print();
}
public static void main(String args[]){
Father father=new Father();
father.publicInstanceMethod();
father.publicStaticMethod();
Son son=new Son();
son.invokeClassMethod();
}
}
A: 实例方法可以调用本类的类方法(如invokeClassMethod()调用了类方法print(),而无论print是不是private的)。
B:实例方法可以调用超类的实例方法(如publicInstanceMethod()),但是若超类的实例方法是private的话就调用不了了。
C:实例方法可以调用超类的类方法(如publicStaticMethod()),但是若超类的类方法是private的话就调用不了了。
D:不用说肯定时错的。
突然一下短路了,不知道实例方法是什么了?查了一下才恍然大悟,原来是这样:(贴出来警示后人)
实例方法也叫做对象方法。 类方法是属于整个类的,而实例方法是属于类的某个对象的。 由于类方法是属于整个类的,并不属于类的哪个对象,所以类方法的方法体中不能有与类的对象有关的内容。即类方法体有如下限制: (1) 类方法中不能引用对象变量; (2) 类方法中不能调用类的对象方法; (3) 在类方法中不能使用super、this关键字。 (4)类方法不能被覆盖。 如果违反这些限制,就会导致程序编译错误。 与类方法相比,对象方法几乎没有什么限制: (1) 对象方法中可以引用对象变量,也可以引用类变量; (2) 对象方法中可以调用类方法; (3) 对象方法中可以使用super、this关键字。 在程序设计中,一些通用的、公用型的方法与类的对象无关,因此常常被作为类方法实现。如Java类库中Math类,其中多数的数学运算操作都被定义成静态方法。因此,可以使用类方法把一些通用的、公用型的方法放在合适的类中,从而很好地将它们组织起来。应用程序中的主方法main就是类方法。