看完这篇文章后,妈妈再也不用担心我搞不懂java中的接口和监听器啦

java中的接口与监听器

一、继承的定义

在了解接口之前,我想我们得先来弄清楚继承这一个概念,java是一个面向对象编程的软件,所以在java中我们需要去定义类,众所周知,类具有方法和属性,由此,当我们遇到一些类他们之间的一些属性与方法是相同的时候,为了不在这些类中重复地去定义这些属性和方法,这时我们就需要定义一个父类,让这些类从获得(继承)这些属性和方法,就像老师和学生,他们是两个不同的类,但是他们之间具有相同的属性和方法,比如说姓名、性别和年龄。继承的定义就是子类从一个父类中继承其保护类型为publicprotected这两种类型的属性和方法

继承的语法格式为:
数据保护类型+class+类名+extends+父类名+{程序主体}
比如我们可以看程序

//定义第一个父类Fatherstyle

public class Fatherstyle{
      int age;  //定义年龄
      String name;  //定义姓名
       int number;   //定义学号
      public void show(){
      System.out.println("姓名: "+name+" 年龄: "+age+" 学号: "+number)}
}

然后我们在定义一个子类,从父类中继承属性和方法,继承之后,我们就可以直接子类中调用父类中的方法了

//定义一个子类Sonstyle
public class Sonstyle extends Fatherstyle{
     public static void main(String[] args)
     {
         Sonstyle ui=new Sonstyle();
         ui.name="张三";
         ui.age=14;
         ui.number=12367;
         ui.show();
     }
   
}

这时我们运行程序在控制台(Console)就可以看到输出的内容为
姓名: 张三 年龄: 14 学号: 12367
总的来说(个人理解):
继承能给我们带来的优势是,他能省去许多相似的代码,对于那些具有相同属性的类别,通过继承,我们就不需要去为每一个类单独去编写他们的属性与方法,省去了许多繁杂步骤,同时也能使得我们的代码简便易理解, 但是我们需要注意的是,继承不能是多继承的,java中的类除了继承了java本身的类之外,他只能再继承一个父类,(可以理解为亲生父亲就只有一个,不会有第二个一样就是public class 子类名 extends 父类名1 父类名2…… )这样继承的话java会报错,再java的API文档中,就有许多类别除了自己特有的属性与方法之外,还会介绍其他的从其他父类中继承的方法。

二、接口

说完了继承之后,下面我们可以来看看接口,**在我们的生活中有些事情是固定的一项特征,比如像我们说的每一个人都有一个特定名字,每一座城市都有一个固定的邮政编码,每一个大学都会有一个特定的名字,每一个快递都会寄到一个特定的地址……**这些事物都相当与一些固定的东西,短时间内无法改变,我们都会一直用,他不能随意更改,这时我们就想到了接口
百度百科对接口的定义是:
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)
从中我们可以知道:
在Java中,接口是一个储存特定属性,和一些抽象方法的定义方法。关于接口的格式是这样的
1、接口的定义方式
public interface 接口名{程序体}
2、接口属性的定义方式为:
public static 数值类型 属性名=值;
public final 数值类型 属性名=值;
static和final 的意思与静态的,最终的,不易改变的这类意思相似,即接口中的属性是一个定值
3、接口中方法的定义方式:
public abstract 返回值类型 方法名(参数1,参数2,参数3);
4、在类中添加接口的格式为:
public class 类名 implements 接口名1,接口名2{程序体}
特别需要注意的是
在接口中,我们可以添加多个接口,跟前面说的继承有些区别,接口中的属性可以由此类直接引用,但是由于接口中定义的方法是抽象的,我们在引用接口的类中必须对接口中所有的方法进行重写,这一项我们可以在下面的程序里面看到接口因为是抽象的,所以他不能去定义一个对象!
还是上面的程序我们接着用做例子

public interface Fatherhomeland {
    
	public static int postcode=410000;
	public final String address ="湖南省长沙市";
		
}

public interface Fatherschool {
	public static String Schoolname="中南大学";
	public static String Englishname="Center South University";
	public static String Adderss="长沙市岳麓区";
	//定义了接口中的方法   abstract 是抽象的的意思
    public abstract void show1(int a);
}

下面我们在当前类中引用接口



public class Sonstyle extends Fatherstyle implements Fatherhomeland,Fatherschool{
	//对接口中的方法进行重写时,需要把abstract去掉
	 public void show1(int a) {
		 System.out.println("学校名称:"+Sonstyle.Schoolname);
         System.out.println("英文名称:"+Sonstyle.Englishname);
         System.out.println("学校地址:"+Sonstyle.Adderss);
	}
     public static void main(String[] args)
     {
         Sonstyle ui=new Sonstyle();
         ui.name="张三";
         ui.age=14;
         ui.number=12367;
         ui.show();
         //从这个语句中我们可以看到,接口中可以直接用 类.属性名 引用接口中的属性 
         System.out.println("邮政编码:"+Sonstyle.postcode);
         System.out.println("地址:"+Sonstyle.address);
         ui.show1(3);
     }
   
}

最后在控制台(Console)中输出的结果为

姓名 张三年龄14学号12367
邮政编码:410000
地址:湖南省长沙市
学校名称:中南大学
英文名称:Center South University
学校地址:长沙市岳麓区
对于接口
我们可以知道,它的属性是一个特定的值,接口中的方法是抽象的方法,他需要在接口中的类中被重写,这样与我们下面要讲的监听器有着密切相关的关系,我们可以看到,当我们的鼠标点击或者键盘按下时,会有不同的反应,我们不可能为每个反应去写一个监听器,这时接口的作用就发挥到了极致,其实我们下面要讲的监听器就是接口,通过对监听器里面的方法进行不同的重写,这样就形成了不同的反应下面我们来看看监听器

java中的事件监听器

监听器通俗来理解的话,是一个响应机制,即当我们有什么操作的时候,监听器会接受一些信息,然后传递给另外的类,执行特定的方法。在java中为每种类型的事件都设定了监听器,常用的是鼠标监听器 (MouseListener)、动作监听器(ActionListener)、键盘事件监听器(KeyListener)
事件监听的实现步骤为:
第一步:确定事件源。

第二步:确定事件类型

第三步:创建一个类,实现对应类型的接口。

第四步:创建监听器的对象,给事件源组件添加事件监听器

对于监听器的话:我们可以以制作一个类似于QQ的登陆界面一样,当我们输入账号和密码,通过监听器判断账号和密码是否正确,进而弹出另外一个界面。

写在前面
在这个登陆界面的程序代码中,我们还需要用到包的知识,因为我们要编写一个登录界面的话,需要一些在java的API文档中的一些类,顶级容器界面类(JFrame)、按钮类(JButton)、文本输入框类(JTextField)……,我们要使用这些类别时,我们需要在类的开头用import来声明我们需要使用的这些类,我现在最常用的两个包是Java的API文档里面的javax.swing包和java.awt包,这些我们需要的界面组件大致都在这里面,而且所有的组件都必须放到顶级容器组件(JFrame)里面,下面我们来看程序:

import javax.swing.JPasswordField;//这个是允许输入单行多字文本的密码框

import java.awt.Color;//这个是用于设置颜色的类
import java.awt.Dimension; 
import java.awt.FlowLayout;//布局方式类,顶级容中的默认布局为绝对布局

import javax.swing.JFrame; //顶级容器组件类
import javax.swing.JLabel;  //标签类
import javax.swing.JTextField;  //允许输入单行文本的输入框
import javax.swing.ImageIcon;  //一个 Icon 接口的实现,它根据 Image 绘制 Icon。用于添加图片
import javax.swing.JButton;  //按钮

public class loginbegain {
	
	//显示界面的方法
	
	public void showUI() {
		
		//创建窗体对象
		
		JFrame loginFrame = new JFrame();
		
		//设置窗体的属性
		//设置窗体的大小
		loginFrame.setSize(600, 450);
		//设置窗体居中显示	
		loginFrame.setLocationRelativeTo(null);
		//设置窗体的布局
		//Flowlayout为流式布局类。
		FlowLayout layout = new FlowLayout();
		
		loginFrame.setLayout(layout);
		
		//创建图片对象标签的大小
		
		Dimension Size=new Dimension(600,270);
		
		//创建一个图片对象
		ImageIcon icon = new ImageIcon("C:\\Users\\zr的帅气honor\\Pictures\\92.jpg");
		//添加图片对象时要注意把文件格式改成 文件名.jpg的形式
		JLabel iconLabel = new JLabel(icon);
		
		iconLabel.setPreferredSize(Size);
		
		//添加到窗体上
		
		loginFrame.add(iconLabel);
		
		//创建账号标签
		
		JLabel Login = new JLabel("              账号");
		
		Login.setForeground(Color.BLUE);
		
		loginFrame.add(Login);
		
		//创建输入框对象
		
		JTextField nameIn = new JTextField();
		
		//设置输入框的大小
		
		Dimension inputSize = new Dimension(400, 30);
		
		nameIn.setPreferredSize(inputSize);
		
		//添加到窗体上
		
		loginFrame.add(nameIn);
		
		
		//创建注册账号的标签
		
		JLabel registerLabel = new JLabel("加入我们             ");
		
		registerLabel.setForeground(Color.BLUE);
		
		//添加到窗体上
		
		loginFrame.add(registerLabel);
		
		//创建密码标签
		
		JLabel mm=new JLabel("密码");
		
		mm.setForeground(Color.BLUE);
		
		loginFrame.add(mm);
		
		//创建密码框
		
		JPasswordField mmk=new JPasswordField();
		
		mmk.setPreferredSize(inputSize);
		
		loginFrame.add(mmk);
		
		JLabel ccgb=new JLabel("忘记密码");
		
		ccgb.setForeground(Color.BLUE);
		
		loginFrame.add(ccgb);
		
		//设置按钮框的大小
		
		Dimension andx=new Dimension(100,30);
		
		//创建一个登录按钮
		
		JButton an=new JButton("登录");
		an.setForeground(Color.BLACK);
		
		an.setPreferredSize(andx);
		
		loginFrame.add(an);
		//设置窗体可见 	
		loginFrame.setVisible(true);
				
		
		loginFrame.setVisible(true);
		response1 judge=new response1();
		judge.k1=nameIn;
		nameIn.addActionListener(judge);
		judge.k2=mmk;
		mmk.addActionListener(judge);
		
		an.addActionListener(judge);
		
		
	}
	
	//主方法
	
	public static void main(String[] fdsfds) {
		
		//创建界面对象
		
		loginbegain ui = new loginbegain();
		
		//调用显示界面的方法
		
		ui.showUI();
	}

}

下面我们来看这其中使用到的监听器:
监听器在代码中如下:

        
		response1 judge=new response1();
		//文本框对象与界面文本框对象相等,这样才能获取文本
		judge.k1=nameIn;
		//文本框添加动作监听器
		nameIn.addActionListener(judge);
		judge.k2=mmk;
		//密码框对象添加动作监听器
		mmk.addActionListener(judge);
		//按钮框添加动作监听器
		an.addActionListener(judge);
//这一片代码区,我们写的是监听器的具体反应
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class response1 implements ActionListener
{

	JTextField k1;
	JPasswordField k2;
	//输入框
	String account;
    //密码框
	String code;	
	//这是对动作监听器(接口)的所有方法进行重写
	public void actionPerformed(ActionEvent e) 
	{
	    //获取账号输入框的文本
		account=k1.getText();
		//用System来测试这种用法是否正确,因为java中方法有很多,有时我们不知道到底用哪个所以可以用System来测试
		System.out.println(account);
		//获取密码框的文本
		code=k2.getText();
		System.out.println(code);
		//用if语句判断
		if("22416".contentEquals(account)) 
		{
			System.out.println("用户名正确");
			if("123456".contentEquals(code)) 
			{
				System.out.println("登陆成功!");
				newJFrame pi=new newJFrame();
				pi.show();
			}
			else 
			{
				System.out.println("密码错误!请重新输入!");
			}
		}
		else 
		{
			System.out.println("用户名不正确,请重新输入");
		}
	}														
}

补充一个第三个程序片中的newJFrame类的代码


import javax.swing.JFrame;

	public class newJFrame {
		
		
		public void show()
		{
			//创建一个新的窗体对象
			JFrame Topface= new JFrame();
			//设置顶级容器的大小
			Topface.setSize(200,200);
			//设置居中显示
			Topface.setLocationRelativeTo(null);
			//设置程序关闭时,窗体关闭
			Topface.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			//设置窗体可见																
			Topface.setVisible(true);
		}

}

下面我们就可以看到程序运行时的效果,打开程序,输入定义的帐号和密码
如图所示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在新的界面中,我们也就可以去发挥想象创建更多的东西啦!(时间有限,弹出的界面中什么都没有,求谅解)

让我们理解理解一下监听器
在登陆界面中,大家也可以看到,代码中只使用到了动作监听器,大致意思是,当我们按下登录按钮时,java会获取账号信息和密码信息,并判断他们是否正确,进而达到登录的目的。监听器相当于一个动作响应者,即当我们有了某一操作时,被监听器捕捉到,然后监听器会进行进一步的操作(个人理解)。

最后的话

博客中有什么错误的地方,大佬们有空的话,可以帮小编指出来,我会根据问题好好修改的,以上对于监听器和接口的看法,许多都是个人的理解,俗话说“一千个读者中有一千个哈姆雷特”希望这些东西能帮到大家。编写不易,有空的话留下你们珍贵的评论和点赞吧,你们的点赞就是我最大的动力!

  • 132
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值