2016-06-28 87 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();