`
happy_zhourong
  • 浏览: 13307 次
  • 性别: Icon_minigender_2
文章分类
社区版块
存档分类
最新评论

接口和事件机制的总结

    博客分类:
  • java
 
阅读更多

一、抽象类的定义格式

 

1、概念:包含抽象方法的类叫做抽象类。

2、定义抽象类的关键字:abstract class

格式:

public abstract class抽象类名 extends 抽象类或类{

         访问修饰符(public,protected,private)数据类型属性名;

 

         访问修饰符抽象类名(数据类型参数名,…){

                   //方法体

}

 

         访问修饰符返回值数据类型方法名(数据类型参数名,…){

                   //方法体

}

 

访问修饰符 abstract 返回值数据类型方法名(数据类型参数名,…);

//注意:抽象方法没有方法体

}

 

2、抽象类和类的区别:

1)抽象类可以比类多定义一种抽象方法,而一般的类不能定义抽象方法。

2)抽象类不能实例化对象,而类可以实例化对象。(因为抽象类中可能含有抽象方法,抽象方法是不能被调用的,故实例化抽象类对象也没有意义,故抽象类不能实例化对象。)

 

3、一般类继承抽象类与抽象类继承抽象类的区别:

一般的类继承抽象类后,必须实现抽象类中所有的抽象方法;

抽象类继承抽象类后,可以不用实现抽象类中所有的抽象方法,只要实现需要的方法即可。

 

Eg:

 

 

 

public abstract class Student {

   private String name;

   //定义构造方法

   public Student(String name) {

      this.name = name;

   }

   //定义一般方法

   public String getName() {

      return name;

   }


   public void setName(String name) {

      this.name = name;

   }

   //定义抽象方法

   public abstract void study();//定义了一个学习的抽象方法study()

   public abstract void exam();//定义了一个考试的抽象方法exam()

}

 

//定义一个一般的类UNStudent继承抽象类Student

public class UNStudent extends Student{

   public UNStudent(String name) {

      super(name);

   }

   //实现抽象类中所有的抽象方法

   @Override

   public void exam() {

      setName("张三");

      System.out.println(getName()+"在考试。");     

   }

 

   public void study(){

      setName("张三");

      System.out.println(getName()+"在学习。");

   }

 

}

 

//定义一个抽象类ComStudent继承抽象类Student

public abstract class ComStudent extends Student{

 

   public ComStudent(String name) {

      super(name);

   }

   //可以选择性的去实现抽象类中的抽象方法

   public void study(){

      setName("张三");

      System.out.println(getName()+"在学习。");

   }

}

 

二、接口的定义格式

1、  定义接口的关键字是:interface

格式:

public interface 接口名{

           //常量

           public static final 常量名 = ;

           //抽象方法

           public abstract 返回值数据类型方法名(数据类型参数名,…);

}

接口中默认的访问修饰符是public

 

2、  接口的实现

关键字:implements

格式:

public class 类名 implements 接口名,…{

 

}

注意:当类实现接口后,类必须实现接口中的所有抽象方法。接口不能实例化对象。

 

当继承和实现接口同时存在时,要先继承,再实现接口。

           public class 类名 extends 父类名 implement 接口名,...{

                    //实现接口的抽象方法

         }

 

接口是告诉我们要做什么事情,接口的实现则是告诉我们怎么做这些事情。

 

接口的实现相当于类中的继承,所以接口的实现中也存在自动转型。

 

3、  接口和类的区别:

 

接口

1

关键字:interface

关键字:class

2

接口只能定义常量和抽象方法

类可以定义任意访问修饰符的方法、属性、常量

3

接口的默认访问修饰符是public

类的默认访问修饰符就是默认的(public,protected,private和默认的)。

4

接口可以实现多重继承

类只能实现单继承

5

接口不能用来实例化对象

类可以用来实例化对象

 

Eg:

//定义一个父类Sport:运动类

public class Sport {

   //定义普通方法jump(),run()

   public void jump(){

      System.out.println("动作:跳跃");

   }
}

 

//定义了一个接口Dance()

public interface Dance {

   //定义抽象方法gyrate():旋转

   public void gyrate();

}

 

//定义一个接口Music(音乐)

public interface Music {

   //定义一个抽象方法play()

   public void play();

}

 

//定义一个子类Eurythmics(艺术体操类)继承父类Sport,并实现了两个接口Dance,Music,当继承和实现接口同时存在时,要先继承,再实现接口

public class Eurythmics extends Sport implements Dance,Music{

   //实现Dance接口中的抽象方法

   public void gyrate() {

      System.out.println("舞蹈动作:旋转");

   }

   //实现Music接口中的抽象方法

   public void play() {

      System.out.println("配乐:天空之城");

   }

 }

 

//定义一个比赛类Match

public class Match {

   public static void main(String[] args) {

      Eurythmics e=new Eurythmics();//实例化一个艺术体操对象

      e.gyrate();//子类实现了Dance接口,子类的对象调用Dance接口中的gyrate()方法

      e.play();//子类实现了Music接口,子类的对象调用Music接口中的play()方法

      e.jump();//子类继承了父类中的jump()方法,子类的对象调用了jump()方法

      System.out.println();

      dancePart(e);//e被看作一个Dance对象,相当于e自动转型,作为参数传入dancePart()

      musicPart(e);//e被看作一个Music对象,相当于e自动转型,作为参数传入musicPart()

      sportPart(e);//e被看作一个Sport对象,相当于e自动转型,作为参数传入sportPart()

   }

   //定义舞蹈部分的方法

   public static void dancePart(Dance dance){

      dance.gyrate();

   }

   //定义音乐部分的方法

   public static void musicPart(Music music){

      music.play();

   }

   //定义运动部分的方法

   public static void sportPart(Sport sport){

      sport.jump();

   }

}

 

 

结果:

舞蹈动作:旋转

配乐:天空之城

动作:跳跃

 

舞蹈动作:旋转

配乐:天空之城

动作:跳跃

 

4、使用接口的原因:

1)核心原因:为了能够自动转型为多个基类,这样给程序带来了灵活性。(如上例)

2)将代码完全与接口的实现分离,不同的子类可以对接口中定义的抽象方法有不同的实现,这也是一种规范,在团队合作中,接口可以是分工变得明确,接口确定下来后,就可以同时进行开发,提高开发效率。

3)使用接口还有使用方便,可读性强,结构清晰等优点

 

 

三、     事件原理

1、     事件处理源:

1)     概念Java中所有的组件对象都是可以作为事件源。包括容器和元素组件。

容器布局不是事件源。

2)     如何判断哪个对象是事件源对象?

根据所操作的方法,看操作时反应在哪个组件上,那么该组件就是事件源。

如图:

 

 

 

  当用鼠标点击登录按钮的时候,按钮是事件源;当在输入框输入一个账号,按回车时,输入框是事件源;当用鼠标点击“账号”这个标签的时候,标签是事件源;当鼠标点击窗体是,窗体是事件源……

 

2、     事件类型(监听器方法)

监听器方法:在组件上发生动作后,要捕获动作的方法。

分局发生的动作以及所要使用的值来决定使用不同的事件类型。

常用的事件接口

事件类型(监听器方法)

ActionListener 动作监听器接口

AddActionListener(对象名);

MouseListener 鼠标监听器接口

addMouseListener(对象名);

MouseMotionListener 鼠标移动监听器接口

addMouseMotionListener(对象名);

KeyListener 按键处理监听器接口

addKeyListener(对象名);

 

3、     事件处理对象

事件处理对象的作用:当监听器方法捕获到动作后,那么就要交给事件处理对象来处理;事件处理对象会实现对应的监听器接口,来完成最后的处理。

 

4、     事件的执行流程

1)     确定事件源对象

2)     确定要发生的是什么类型的事件

3)     给事件源添加监听器方法

4)     实例化事件处理类的对象(定义类实现事件接口,并且实现接口中的方法)

5)     给监听器方法绑定事件处理类对象

 

只要事件源发生监听器方法能捕获到的动作,那么方法就会捕获动作信息以及事件源的相关信息,然后激活事件处理对象,将收集的信息和动作一并交给事件处理对象,事件处理对象会根据信息自动调用事件处理方法。

 

Eg1:实现QQ登录界面登录的过程,做账号和密码验证。

QQ界面上的关键代码如下:

 

 

JButton jb=new JButton("登 录");

      jp2.add(jb);
	//jcb为下拉框对象,jpf为密码输入框对象,jf为登录窗口对象
      LoginListener ll=new LoginListener(jcb,jpf,jf);

      jb.addActionListener(ll);

  

定义事件处理类:

//定义LoginListener类实现了事件接口ActionListener
public class LoginListener implements ActionListener {
	
	private JComboBox jcb;
	private JPasswordField jpf;
	private JFrame jf1;
	//定义构造方法,便于在实例化事件处理类对象时,将qq界面上将下拉框、密码输入框、登录窗口的对象的地址传过来,进行事件处理
	public LoginListener(JComboBox jcb,JPasswordField jpf,JFrame jf1){
		this.jcb=jcb;
		this.jpf=jpf;
		this.jf1=jf1;
	}
	
/**
 * 事件处理方法
 */
	public void actionPerformed(ActionEvent arg0) {
		String jcbStr=(String)jcb.getSelectedItem();//获取下拉列表中选中项,并把其转成String类型
		String jpfStr=new String(jpf.getPassword());
		//当账号和密码匹配时,出现新的QQ界面(窗口),同时登录窗口关闭
		if(jcbStr.equals("12345678")&&jpfStr.equals("123")){
			JFrame jf=new JFrame("QQ2013");
			jf.setSize(260,600);
			jf.setResizable(true);
			jf.setLocationRelativeTo(null);
			jf.setDefaultCloseOperation(3);
			jf.setVisible(true);
			jf1.setVisible(false);//将登录窗口隐藏起来
		}else{
			//当账号和密码不匹配时,弹出提示信息
			JOptionPane.showMessageDialog(null, "请输入正确的账号和密码!");
		}
				
	}
	
}

 

  1、点击登录按钮后,事件发生,事件源为登录按钮。

2、即将发生的事件为:当账号和密码匹配时,出现新的QQ界面(窗口),同时登录窗口关闭;当账号和密码不匹配时,弹出提示信息。

3、添加监听器方法addActionListener()

4、定义LoginListener类实现了事件接口ActionListener,实例化事件处理类的对象ll

5、给监听器绑定事件处理对象ll

 

 

 

  • 大小: 4 KB
分享到:
评论

相关推荐

    Java接口回调机制

    异步调用是一种类似消息或事件的机制解决了同步阻塞的问题,例如A通知B后,他们各走各的路,互不影响,不用像同步调用那样,A通知B后,非得等到B走完后,A才继续走。回调是一种双向的调用模式,也是说,被调用的接口...

    精通Windows.API-函数、接口、编程实例.pdf

    17.2 安全机制程序示例 509 17.2.1 列举进程访问令牌内容和权限 509 17.2.2 修改进程的权限 514 17.2.3 列举安全对象的安全描述符 515 17.2.4 修改安全描述符 521 17.3 用户 522 17.3.1 ...

    字节大佬总结的Java面试资料

    字节大佬总结的Java面试资料 JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接 的交互。 ...

    用工厂模式、反射机制和缓存机制来设计数据访问层的接口

    近做项目,使用的是三层架构,在创建数据访问层接口的时候,使用的是反射和缓存机制,但是在运行的时候,总是提示不成功,测试发现反射机制出现问题,没有生成反射对应的类,加载失败,和别人写的代码进行对比,发现...

    精通Windows API--函数、接口、编程实例

    Windows API(Windows Application Program Interface,Windows应用程序接口)是一系列函数、宏、数据类型、数据结构的集合,运行于Windows系统的应用程序,可以使用操作系统...第3部分(第18章)作为全书的总结和补充。

    精通WindowsAPI 函数 接口 编程实例

    17.2 安全机制程序示例 509 17.2.1 列举进程访问令牌内容和权限 509 17.2.2 修改进程的权限 514 17.2.3 列举安全对象的安全描述符 515 17.2.4 修改安全描述符 521 17.3 用户 522 17.3.1 创建用户 522 ...

    Java反射机制重点总结

    文章目录Java ReflectionJava反射机制提供的功能Java反射相关的主要APIjava.lang.Class类Class类的核心要点Class类的重要API实例实例化Class类对象(四种方法)创建类对象并获取类的完整结构获取Class对象后创建类的...

    精通WindowsAPI:函数、接口、编程实例 电子书

    《精通WindowsAPI:函数、接口、编程实例》全书共18章,分为...第3部分(第18章)作为全书的总结和补充。 从Windows应用程序开发工具讲起,引导读者快速入门 详细讲解API和关键结构的使用方法 提供156个WindowsAPI使用实例

    ccna考试之rip总结

    RIP的防环机制:1、水平分割:A、水平分割:从接口收到的路由信息,不再从本接口发出。 B、毒性逆转的水平分割:从本接口收到的路由信息,转发 表示为16跳不可达。(防路由和IP包的环路) 2、最大...

    Android工作实践总结:Aidl 远程调用(aidl实例总结)

    Android工作实践总结:...AIDL的IPC的机制和COM或CORBA类似, 是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相关类.; 2. 调用aidl产生的class.

    Vivado HLS 视频课程总结

    2 Vivado HLS的工作机制 5 3-4 HLS设计流程基本概念 9 5 任意精度数据类型 15 5.1 C语言支持的数据类型 15 5.2 sizeof()函数使用 16 5.3 设置Visual Studio支持任意精度数据类型 17 6 数组类型转换 17 6.1 变量的...

    C#接口回调实现方式的总结.zip

    vs2015环境能跑,具有一定C#基础,需要深入理解语言逻辑机制的同志有一定参考价值,代码中有详细注释,具体见https://blog.csdn.net/coolzpf/article/details/117223856

    MTK 短信的发送机制

    MTK 短信的发送机制,同事总结出来的,很实用的文档

    精通Windows.API-函数、接口、编程实例

    Windows API(Windows Application ProgramInterface,Windows应用程序接口)是一系列函数、宏、数据类型、数据结构的集合,运行于Windows系统的应用程序,可以使用操作系统提供...第3部分(第18章)作为全书的总结和补充。

    Java高级程序设计实战教程第三章-Java反射机制.pptx

    3.2.3 Java反射机制的相关API java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口。反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问。它允许在安全限制内使用反射的字段,...

    精通WindowsAPI:函数、接口、编程实例

    《精通WindowsAPI:函数、接口、编程实例》全书共18章,分为...第3部分(第18章)作为全书的总结和补充。 从Windows应用程序开发工具讲起,引导读者快速入门 详细讲解API和关键结构的使用方法 提供156个WindowsAPI使用实例

    Android事件分发与消费

    之前写过一篇Android事件分发机制详解,感觉比较乱,这里再总结一下。网上已经有很多前辈分析过源码,大家可以参考,我这里尽量不做过多的源码分析,仅仅从流程上分析。事件分发和消费我们主要涉及到以下三个方法:...

    python爬虫开发常见问题及其解决方法和经验总结.docx

    Python爬虫开发中常见问题及其解决方法和经验总结主要包括以下几点: 网络请求问题 请求失败或超时:设置合理的超时时间,并使用异常处理机制(如try-except),当出现requests.exceptions.Timeout异常时进行重试...

    JavaScript王者归来part.1 总数2

     13.2.1 事件和事件类型   13.2.2 事件的绑定   13.2.3 直接调用事件处理函数   13.2.4 事件处理函数的返回值   13.2.5 带参数的事件响应及其例子   13.2.6 “this”关键字   13.3 标准事件模型   ...

Global site tag (gtag.js) - Google Analytics