java中的接口与监听器

一、继承的定义

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

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

//定义第一个父类Fatherstylepublic 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 blocke.printStackTrace();}//设置窗体可见                                                                Topface.setVisible(true);}}

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




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

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

最后的话

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

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

  1. 自从看了这篇文章,妈妈再也不用担心我的学习了!!

    Vue部分小结 首先理清思路 代码展示 1.v-if以及{{}}代码展示 <body><div id="app" ><h1 v-bind:class= ...

  2. 看了这篇文章,妈妈再也不用担心我的学习了---spark原理

    前言 大家好,我是DJ丶小哪吒,我又来跟你们分享知识了.对软件开发有着浓厚的兴趣.喜欢与人分享知识.做博客的目的就是为了能与 他 人知识共享.由于水平有限.博客中难免会有一些错误.如有 纰 漏之处,欢 ...

  3. 看完这篇文章后,你一定知道如何正确选股!

    看完这篇文章后,你一定知道如何正确选股!篇幅很长,但是都是干货,请耐心阅读! 选股应该博爱!真正的股票投资人一定是拥有博爱情怀的.很多时候,股民们纠结于某只或某几只股票不能自拨,导致频频在股市中吃亏碰 ...

  4. 怎样知道android的手机号码,如何查询自己的手机号码?看完这三种方法,再也不用担心了...

    原标题:如何查询自己的手机号码?看完这三种方法,再也不用担心了 导语:现在智能手机如此盛行的时代,相信很多人有不止一部手机,这样就会出现自己的手机号码记不住的情况,身边经常有朋友遇到过自己的号码也记不 ...

  5. 看完这篇文章,我再也不怕面试官问「垃圾回收」了...

    前言 Java 相比 C/C++ 最显著的特点便是引入了自动垃圾回收 (下文统一用 GC 指代自动垃圾回收),它解决了 C/C++ 最令人头疼的内存管理问题,让程序员专注于程序本身,不用关心内存回收这 ...

  6. 专门学了三个月爆款标题写作,还不如看完这篇文章后思路清晰,值得收藏的技巧合集。

    如何通过三个层面提升个人主页的品质.其中关键一点讲到封面图要写上抖音内容的主标题,让用户看到封面就能知道视频的大概内容,这对于进入个人主页的用户来说感觉更好.之所以我们会点开一篇作品,大多是因为标题足 ...

  7. RedLock: 看完这篇文章后请不要有任何疑惑了

    图片来源:无证之罪 公众号后台经常会有小伙伴咨询RedLock相关问题,笔者在此再来一篇文章剖析一下RedLock,希望此文能解决你对它所有的疑惑和误解. 为什么需要RedLock 这一点很好理解,因 ...

  8. kktv支持鸿蒙系统,康佳电视怎么投屏?看完这篇文章后,你就是“投屏达人”...

    随着液晶电视.智能电视.网络电视的出现,很多厂家也推出了对应的投屏功能,但很多朋友因为不了解投屏是什么玩意,又不知道怎样操作可以让自家的电视具备此功能.本期文章以康佳电视为例,教大家如何投屏. 一.使 ...

  9. 敏捷与安全不可兼得吗?看完这篇文章后,我想说:未必!

    摘要:敏捷与安全似乎矛盾,但如何共存?本文将为你解读从"应用敏捷"到"应用敏捷+安全"的实现路径. 起初,企业以传统的瀑布式研发模式把软件开发过程划分为需求.分 ...

  10. 看完这篇文章,你再也不怕用solidworks进行大型零件装配时电脑卡顿

    作为一款再机械设计领域使用较多的设计软件,solidworks常常被用于零件装配的设计展示,但在利用SolidWorks进行零件装配的过程中,我们有时会感觉solidworks软件运行很卡,个别时候, ...

最新文章

  1. Pandas数据规整
  2. MDI接口原理图设计
  3. 机器学习和图像识别是怎样彻底改变搜索的?
  4. CSS设置文字的划线
  5. DELPHI实现游戏内存的修改
  6. topcoder srm 714 div1
  7. 吴恩达机器学习--单变量线性回归【学习笔记】
  8. 自己制作精美的App Store 软件截屏
  9. 2015.8.3 Java
  10. 时间管理术第一原则总结
  11. Sentinel流控规则_关联_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0035
  12. 适时突破[我眼中的戴尔转型]
  13. GDB 调试错误解决
  14. 台湾省九齐NY8A051G 内置MOS版本6 I/O 8-bit EPROM-Based MCU
  15. 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树
  16. 做需求分析师的几点困惑
  17. BS、CS分别是什么,BS、CS有什么区别和联系
  18. CODEVS1214
  19. 大规模MIMO技术概述
  20. 用Echarts自定义多系列左右双坐标对比的图表,适合展示TGI对比等场景

热门文章

  1. 【MATLAB】(一)基本使用入门
  2. 51单片机 呼吸灯 七彩呼吸灯
  3. EasyDrv 3.5 Beta 1.5驱动选择工具最新版
  4. Linux - yum安装步骤
  5. vim 编辑二进制文件
  6. Xshell 5 家庭和学校版下载
  7. Padavan安装使用ZeroTier实现组建虚拟局域网的方法
  8. Diablo 大菠萝
  9. SQL Server执行计划(2) - 如何查看执行计划
  10. Axure资源及原型工具Axure RP 9下载