2013-07-14 126 views
1

與擴展到JFramejavax.swing.JFrame有什麼不同嗎?從JFrame延伸

例子:

public class Authenticator extends JFrame { 

和...

public class Authenticator extends javax.swing.JFrame { 
+5

***請勿延長框架或其他頂層容器。而是創建並使用一個實例。 –

+0

請參閱http://stackoverflow.com/q/1143923/758280 – Jeffrey

+0

如果您有另一個類調用'JFrame',那麼您需要識別您想要使用的包 – nachokk

回答

6

指定它這沒有什麼區別,除非你有一個名爲JFrame另一個類,並且不是導入它的javax.swing.JFrame

這就是說,正如Andrew Thompson所說,你不應該延伸JFrame,你應該使用一個實例。

0

這取決於你的進口。如果您導入javax.swing.JFrame,則不會。

0

無論如何,你必須導入JFrame,它最有可能來自javax.swing包,如果包含多個JFrame類,你只需要編寫整個包路徑,這樣編譯器就會知道你想使用哪一個,因此,如果只有一個JFrame類,那麼進口就足夠了,不必再

1

如果您導入javax.swing.JFrame;然後使用 公共Authenticator類擴展的JFrame { 如果沒有的話用 公共Authenticator類擴展jvax.swing.JFrame {
但是當你有不同的功能套餐同名類第二種方法主要用於,以區分這些類。
例如
[ - ] mypackage的
  | ---- [ - ] pakage1
              | --- TestClass.java
  | ---- [ - ] pakage2
              | --- TestClass.java

這是我們的情況一個包名爲mypackage的和兩個子包pakage1和pakage2

現在,如果我們只是導入它會給這個

import mypackage.pakage1.TestClass; 
import mypackage.pakage2.TestClass; 
class Testw 
{ 
public static void main(String []args) 
{ 
System.out.println("Swah!"); 
} 
} 

它會給以下錯誤

C:\Program Files\Java\jdk1.6.0_38\bin>javac Testw.java 
Testw.java:2: mypackage.pakage1.TestClass is already defined in a single-type import 
import mypackage.pakage2.TestClass; 
^ 
1 error 


所以你要做什麼?
在這種情況下,您可以使用第二種方法,也稱爲完全取消名稱 現在您導入一個pakage併爲其他方法使用完全限定名稱。

import mypackage.pakage1.TestClass; 
class Testw 
{ 
public static void main(String []args) 
{ 
TestClass testclass1 = new TestClass(); 
mypackage.pakage2.TestClass testclass2 = new mypackage.pakage2.TestClass(); 
System.out.println("Swah!"); 
} 
} 

所以整個事情的夏日是完全合格的名稱時使用的是命名衝突,我們也可以使用這種方法時,他們沒有命名衝突,他們將在節目

沒有-ve影響