2016-06-28 63 views
0

为什么在编译时出错if (i == 0) { print(); }?是否因为main是静态的,即使它在A的类中?java中的静态方法main

public class A { 
     private void print() { System.out.print(foo() + " "); } 
     public String foo() { return "AAA"; } 
     public static void main(String[] args) { 
       A[] arr = { new A(), new B() }; 
       for (int i = 0; i < 2; i++) { 
/***/     if (i == 0) { print(); } 
} 
} 
} 
public class B extends A { 
     private void print() { System.out.println("%" + foo() + " "); } 
     public String foo() { return "BBB"; } 
     public void bar() { print(); } 
} 
+0

main is static;打印不是。非常基本的东西;说实话,你不应该要求;但要学习教程,书籍等。 – GhostCat

+0

了解什么'static'意思是:[了解类成员](https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html) – Jesper

回答

2

有一个编译器错误,因为你正试图从调用静态方法main非静态方法print。是的,main必须是静态的。

您需要创建的A一个实例,然后调用印刷方法在该实例上:

A a = new A(); 
a.print(); 
1

print()是非静态的。这意味着它是针对类A的对象的。因为它是静态的,并且静态方法属于该类,所以不能从main()中调用它。要拨打print(),你可以这样做:

A a = new A(); 
a.print();