Video: Java'da Nested Class (iç içe sınıflar) Java Eğitim Serisi 5 2024
İşte büyük haber! Java'da bir sınıfı başka bir sınıfta tanımlayabilirsiniz! Burada,
GameFrame
sınıfı
MyActionListener
adlı bir sınıf içeriyor.
import java. awt. Akış düzeni;
import java. awt. Etkinlik. ActionEvent;
import java. awt. Etkinlik. ActionListener;
import java. util. Rastgele;
İçe aktarma javax. salıncak. JButton;
import javax. salıncak. JFrame;
İçe aktarma javax. salıncak. JLabel;
İçe aktarma javax. salıncak. JTextField;
sınıfı GameFrame, JFrame'i genişletiyor {
private static final long serialVersionUID = 1L;
int randomNumber = yeni Rasgele (). nextInt (10) + 1;
int numGuesses = 0;
JTextField textField = yeni JTextField (5);
JButton düğmesi = yeni JButton ("Tahmin et");
JLabel label = yeni JLabel (numGuesses + "tahminler");
public GameFrame () {
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE);
setLayout (yeni FlowLayout ());
ekleyin (textField);
(düğme) ekleyin;
(etiket) ekleyin;
düğmesine basın. addActionListener (yeni MyActionListener () );
paket ();
SetVisible (doğru);
}
sınıfı MyActionListener, ActionListener {
@Override
'ı uyguluyor. Public void actionPerformed (ActionEvent e) {
String textFieldText = textField . GetText ();
if (Tamsayı parseInt (textFieldText) == randomNumber) {
düğmesi. (Yanlış) setEnabled;
textField. setText (textField. getText () + "Evet!");
textField. (Yanlış) setEnabled;
} başka {
textField. Metin ayarla("");
textField. requestFocus ();
}
numGuesses ++;
Dizge guessWord = (numGuesses == 1)? "Tahmin": "tahmin";
etiketi. setText (numGuesses + guessWord);
}
}
}
Yukarıdaki
MyActionListener
sınıfı iç sınıfıdır. İç sınıf diğer sınıflara çok benzer. Ancak bir iç sınıfın kodunda, kapsayan sınıfın alanlarına bakabilirsiniz. Örneğin,
MyActionListener
içindeki çeşitli ifadeler
textField
ve
textField
adlarını
GameFrame
sınıfında tanımlanmıştır.
Yukarıdaki kodun
MyActionListener
sınıfını yalnızca bir kez kullandığına dikkat edin. (Tek kullanım,
düğmesini çağırmaktır addActionListener
) Yani, yalnızca bir kez kullanılan bir şey için gerçekten bir ada ihtiyacınız var mı? Hayır, bilmiyorsun.
çağrısı içindeki iç sınıfın tüm tanımını değiştirebilirsiniz.addActionListener
. Bunu yaptığınızda, anonim bir iç sınıf olan var. İşte böyle işliyor.
import java. awt. Akış düzeni;
import java. awt. Etkinlik. ActionEvent;
import java. awt. Etkinlik. ActionListener;
import java. util. Rastgele;
İçe aktarma javax. salıncak. JButton;
İçe aktarma javax. salıncak. JFrame;
İçe aktarma javax. salıncak. JLabel;
İçe aktarma javax. salıncak. JTextField;
sınıfı GameFrame, JFrame'i genişletiyor {
private static final long serialVersionUID = 1L;
int randomNumber = yeni Rasgele (). nextInt (10) + 1;
int numGuesses = 0;
JTextField textField = yeni JTextField (5);
JButton düğmesi = yeni JButton ("Tahmin et");
JLabel label = yeni JLabel (numGuesses + "tahminler");
public GameFrame () {
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE);
setLayout (yeni FlowLayout ());
ekleyin (textField);
(düğme) ekleyin;
(etiket) ekleyin;
düğmesine basın. addActionListener (yeni ActionListener () {
@Override
public void actionPerformed (ActionEvent e) {
Dizeli textFieldText = textField. = düğmesi setEnabled (false);
textField.setText (textField.getText () + "Evet!");
textField.setEnabled (false);
} else {
string GuessWord = (numGuesses == 1) "Tahmin": "Tahminler";
etiket. SetText (numGuesses + guessWord);
}
}
);
paket ();
SetVisible (doğru);
}
}
İç sınıflar,
actionPerformed
yöntemi gibi olay işleyicileri gibi işler için iyidir. anonim
iç sınıfı hakkında en zor şey, parantezleri, kıvırcık parantezleri ve girintiyi takip etmektir Bazı mütevazı tavsiye: herhangi bir iç sınıf olmadan kod yazarak başlayın. Daha sonra sıradan Java sınıflarıyla sıkıldığınızda sıradan sınıflarınızdan bazılarını iç sınıflara çevirerek deney yapın.