public class MethodCall
{
public static void main(String[] args)
{
Test.sayStatic();
Test test = new Test();
test.sayInstance();
}
}
class Test
{
public static void sayStatic()
{
System.out.println("这是一个静态方法。");
}
public void sayInstance()
{
System.out.println("这是一个实例方法。");
}
}
我的理解:
public class Authorization {
public static final int MANAGER = 1;
public int manager;
public static void main(String[] args) {
Authorization A=new Authorization();
A.manager=1;
Test B=new Test();
System.out.println(B.canAccess(A.manager)+"不同类下非静态的实例方法");
//非静态方法必须通过实例调用,方法是Test类下的方法,所以用Test属性的实例来调用
System.out.println(Test.Access(A.MANAGER)+"不同类下静态的实例方法");
//静态的方法可以不需要实例来调用,可以直接用方法名调用,这里的Access方法不在Authorization类下,所以要写上类名注明来处
System.out.println(A.couldAccess(A.manager)+"同一个类下非静态的实例方法");
//这里的couldAccess方法在Authorization类下且为非静态的,所以要用Authorization属性的实例来调用
System.out.println(weAccess(A.manager)+"同一个类下静态的实例方法");
/*这里的weAccess方法也在Authorization类下且为静态,故不需要创建实例来调用,并且可以省略掉类名。
加上Authorization或者实例来调用也可以,最好是加上类名,以便使格式保持一致*/
//这里的大写的MANAGER这些变量可以看做是实例的属性,也可以直接作为常量使用,最好是直接作为常量使用
}
public boolean couldAccess(int access) {
if (access == Authorization.MANAGER)
{
return true;
} else
{
return false;
}
}
public static boolean weAccess(int access) {
if (access == Authorization.MANAGER)
{
return true;
} else
{
return false;
}
}
}
另一个类Test:
public class Test {
public boolean canAccess(int access) {
if (access == Authorization.MANAGER)
{
return true;
} else
{
return false;
}
}
public static boolean Access(int access) {
if (access == Authorization.MANAGER)
{
return true;
} else
{
return false;
}
}
}