一,、接口
- 父類和子類比較,父類是一個(gè)比子類更抽象的類,。這個(gè)抽象體現(xiàn)在兩個(gè)方面:一是父類的屬性和方法比子類的少;二是,,子類的方法比父類的方法更加具體,。
- 當(dāng)父類非常抽象時(shí),或者我們僅僅知道這個(gè)類的對(duì)象應(yīng)該干什么,,但是說(shuō)不清楚如何去做,,只有到了子類我們才知道該如何做,這個(gè)時(shí)候我們可以定義這樣一個(gè)類,,類中的方法只有方法的定義,,沒(méi)有方法體,如果一個(gè)類中的所有方法都沒(méi)有方法體,,這個(gè)類我們就叫做接口:
//繼承person接口
public interface Person{
//接口中的屬性默認(rèn)是public static final,,只能是public static final
public static final int num=100;
//接口中的方法默認(rèn)是public abstract,只能是public abstract
void eat();
public abstract void rest();
}
- 需要注意的是:
接口的定義不是用class 而是用 interface 接口中同樣可以定義屬性和方法 *接口中的屬性必須是一個(gè)公共的靜態(tài)變量public static final *接口中的方法必須是一個(gè)公共的抽象方法public abstract 因?yàn)榻涌谥械姆椒ǘ际浅橄蠓椒?,所以接口是沒(méi)有構(gòu)造方法的,,不能創(chuàng)建對(duì)象,定義一個(gè)接口的主要作用就是給子類擴(kuò)展,接口是一種數(shù)據(jù)類型 - 接口的實(shí)現(xiàn)
//studen類,,實(shí)現(xiàn)person接口
public class Student implements Person{
//實(shí)現(xiàn)接口中的方法,,必須加上public
public void eat(){
System.out.println('學(xué)生在吃飯');
}
//實(shí)現(xiàn)接口中的方法,必須去掉abstrac
public void rest(){
System.out.println('學(xué)生在宿舍休息');
}
}
接口的實(shí)現(xiàn)(繼承)使用implements關(guān)鍵字,,這是與類的extends不同的;實(shí)現(xiàn)類中,,必須重寫(實(shí)現(xiàn))接口中定義的所有方法! 使用:
public static void main(String[] args){
//創(chuàng)建學(xué)生類對(duì)象
Person p1=new Student();
//重寫父類的方法
p1.eat();
p1.rest();
}
二,、事件監(jiān)聽(tīng)器
我們要監(jiān)視一個(gè)界面上的按鈕有沒(méi)有被點(diǎn)擊,,就要給按鈕裝上一個(gè)類似監(jiān)聽(tīng)器的東西,這個(gè)東西叫做事件監(jiān)聽(tīng)器,。
- 在Java中,,每個(gè)事件都對(duì)應(yīng)有一個(gè)時(shí)間監(jiān)聽(tīng)器,它們被定義在
Java.awt.event 這個(gè)包中 - 事件監(jiān)聽(tīng)器都是接口,,我們要定義一個(gè)類來(lái)實(shí)現(xiàn)對(duì)應(yīng)的接口
下面的程序?qū)崿F(xiàn)的是判斷輸入框中的用戶名和密碼是否都是“123”(可以自己修改),若是則彈出窗口提示yes,,若不是彈出窗口提示no 事件監(jiān)聽(tīng)器:監(jiān)聽(tīng)點(diǎn)擊按鈕
public interface ActionListener extends EventListener {
/**
* Invoked when an action occurs.
*/
public void actionPerformed(ActionEvent e);
}
顯示窗體(接上一篇登陸界面):
給組件添加監(jiān)聽(tīng)器:
package com.listener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
/**
* 使用監(jiān)聽(tīng)器接口
* @author mo
*
*/
public class ButListener implements ActionListener {
//全路徑創(chuàng)建
private javax.swing.JTextField jtx1=new javax.swing.JTextField();
private javax.swing.JTextField jtx2=new javax.swing.JTextField();
//構(gòu)造傳參
public ButListener(JTextField jtx1,JTextField jtx2) {
this.jtx1 =jtx1;
this.jtx2=jtx2;
}
public void actionPerformed(ActionEvent e){
javax.swing.JFrame jf=new javax.swing.JFrame();
jf.setSize(150, 80);
jf.setTitle('提示');
jf.setDefaultCloseOperation(1);//退出進(jìn)程方法,關(guān)閉時(shí)不退出程序
jf.setLocationRelativeTo(null);//設(shè)置居中顯示
java.awt.FlowLayout flow= new java.awt.FlowLayout();
jf.setLayout(flow);//流式布局
String display;
//判斷是否滿足條件
if(jtx1.getText().equals('123')&&jtx2.getText().equals('123')){
display='Yes!';
}else{
display='No!';
}
//在窗體中顯示字體
javax.swing.JLabel t=new javax.swing.JLabel(display);
//在窗體中加入標(biāo)簽
jf.add(t);
//設(shè)置可見(jiàn)
jf.setVisible(true);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
主函數(shù):
package com.listener;
public class Main {
public static void main(String [] args){
Login lo=new Login();
lo.showFrame();
//顯示窗體
}
}
顯示結(jié)果
|