java中类的表现形式分为三种:
interface
class
abstract class
为什么需要接口?
接口可以被继承之后去实现具体的功能,扩展性很好。
接口的实现与类的继承相比而言,更加的条理清晰。
接口解决多继承带来的种种问题。
一个class只能extends一个class (单根继承)
public class A{}
public class B extends A{}
一个interface可以extends多个interface
public interface C{}
public interface D{}
public interface E extends C,D{}
一个class可以implements多个interface
public class F implements C,D{}
一个class可以在extends一个class后,再implements多个interface
public class G extends A implements C,D{}
接口的特点:
1、接口中的属性,必须是公共的静态常量
2、接口具有很好的扩张性,里面的方法都是没有方法体的,是一个非常抽象的方法。
3、接口中的方法是抽象的,用来创建对象是无意义的,它不能产生任何行为,所以接口中没有构造方法。创建对象的时候,虽然接口是父类,但是不需要先调用接口的构造方法,(接口没有构造方法)即可创建对象。
特别注意:
继承(实现)一个接口需要用关键字implements
实现一个接口需要实现接口中的所有方法,故必须要给所有方法加上方法体.
子类在重写父类方法的时候不可以减少方法的可见性.
//接口中的方法都是没有方法体的,是一个非常抽象的方法.
public interface Person { public static final String name="人";//必须赋予初值 String s="";//默认是public static final public void study();//=public abstract void study(); } public class Student implements Person{ public void study() { System.out.println("学习"); } public void eat(){、、此处必须声明是public的 System.out.println("吃饭"); } } public class Manager { public static void main(String args[]){ Person p=new Student(); p.study(); p.eat(); } }
关于多个接口的继承与强制转换:
public class Manager { public static void main(String args[]){ Person p=new Student(); p.study(); p.eat(); //Person继承了a,b,所以a,b都是Student的父类 //所以以下写法都是正确的 a a1=new Student(); b b1=new Student(); b b2=(b)a1;//强制转型关心的是原本的类型,原本a1是Student类,所以可以被转成b People pp=new People(); // a a2=(a)pp; /*此时会编译出错,因为pp是People类型,People类是Student的父类, *a类是Student的子类,但是People和a类并无直接关系. */ } } public interface b { void ab(); } public interface a { void ab(); } public class People { int num; } public class Student extends People implements Person{ public void study() { System.out.println("学习"); } public void eat(){ System.out.println("吃饭"); } public void ab() { System.out.println("这是a与b的方法"); } } public interface Person extends a,b{ public static final String name="人";//必须赋予初值 String s="";//默认是public static final public void study();//=public abstract void study(); void eat(); }
接口的实现与类的继承的区别和联系
通过接口可以实现不相关类的相同行为,而不需要了解对象所对应的类。
如果你的一组方法需要在很多类里实现,那么就可以把它们抽象出来,做成一个接口规范,更加方便使用。
如果你的接口有三个实现类,而三个实现类实现接口的某个方法的逻辑各不相同,利用java的多态机制会非常简化代码编写,逻辑也会很清晰。
给你举个例子,假设有A B C三个类,都有一个move()方法,如果要求你实现一个数组,数组里面只能是A B C的一种,需要遍历集合然后分别调用集合元素的move()方法 ,你想想怎么弄?
你只能具体instanceof A 这样挨个判定是那个具体类型,然后分别调用A.move() B.move() C.move()方法
而加入你定义了一个A B C 统一的接口 名称为MInterface ,接口的方法就是move() ,那么就可以用下面的代码很简单实现
public class InterfaceDemo { public static void main(String[] args) { MInterface[] ary=new MInterface[5];//直接定义一个接口的数组,调用不同的 //实现方法,可是类的继承无法做到这一点 ary[0]=new A(); ary[1]=new B(); ary[2]=new C(); ary[3]=new B(); ary[4]=new A();//接口的具体实现类 for(MInterface m:ary){ m.move();//java的自动向下绑定会自动实现具体实现类的move()方法 } } } class A implements MInterface{ public void move() { System.out.println("这一行代表A对接口方法的业务逻辑实现"); } } class B implements MInterface{ public void move() { System.out.println("这一行代表B对接口方法的业务逻辑实现"); } } class C implements MInterface{ public void move() { System.out.println("这一行代表C对接口方法的业务逻辑实现"); } } interface MInterface{ public void move(); }
事件监听机制的基本了解
在窗体程序中,会涉及到许多鼠标键盘的动作,程序需要知道他们在什么时候产生了动作,所以需要加一个监听器时刻监视他们的行为,比如是否点击了某一个按钮,鼠标现在指在哪个位置.
实现方法:定义一个监听器并实现相应接口,再增加到相应的对象上,实现对该对象产生的事件的监听.
示例程序:
public class MyListener implements ActionListener{ public void actionPerformed(ActionEvent e) { } } public class MainUI extends JFrame{ MainUI(){ JButton denglu=new JButton("登 录");//按钮 this.setTitle("QQ "); this.setSize(380, 295); this.setDefaultCloseOperation(3); denglu.setBounds(115, 250, 160, 30);//定位 denglu.setContentAreaFilled(false);//设置按钮透明 this.add(denglu); MyListener lis=new MyListener(); denglu.addActionListener(lis); } } public class Main { public static void main(String[] args) { MainUI mu=new MainUI(); mu.setVisible(true); } }
相关推荐
事件监听器的实现方式有多种,本篇文章将介绍四种常见的事件监听器实现方式:自身类作为事件监听器、外部类作为事件监听器、匿名内部类作为事件监听器和内部类作为事件监听器。 1. 自身类作为事件监听器 在这个...
### Java监听器基础知识与实践 #### 一、Java监听器概念 在Java中,监听器是一种用于处理事件的机制。当某个特定类型的事件发生时,监听器会执行相应的操作。这种机制广泛应用于图形用户界面(GUI)编程中,使得...
1. **定义监听器类**:该程序定义了一个名为`AnonyTest`的类,继承自`JFrame`,同时实现了`ActionListener`接口。这表示`AnonyTest`可以处理`ActionEvent`事件。 ```java class AnonyTest extends JFrame ...
Listener监听器是一种特殊的类,用于监听 web 应用程序中的 ServletContext、HttpSession、ServletRequest 等域对象的创建和销毁事件,以及监听这些域对象中的属性发生修改的事件。Listener监听器可以分为三类: 1....
通过分析这些代码,开发者可以更好地理解和掌握Button与点击监听器的使用方法,并将其应用到自己的项目中。 总的来说,Button和点击监听器是Android应用开发中的基础元素,它们共同构建了用户与应用之间的交互桥梁...
在Spring中,监听器是通过实现特定接口或者继承抽象类来定义的,这些接口包括ApplicationContextAware、ApplicationListener等。本资料"spring监听器共20页.pdf.zip"可能详细阐述了Spring监听器的概念、工作原理以及...
内部类可以提供更好的封装性和代码组织,常用于实现事件监听器、回调机制等场景。使用内部类可以隐藏实现细节,提高代码的可读性和可维护性。 然后,我们讨论**抽象类(Abstract Class)**。抽象类是一种不能实例化...
### Java事件和监听的区别 在Java编程语言中,事件(Event)与监听器(Listener)是构建用户交互界面的关键组成部分。...理解和掌握事件与监听器的概念及其工作原理,对于开发高质量的Java应用程序来说至关重要。
在Servlet规范中,监听器(Listener)与Servlet接口和Filter接口并列,成为Web开发的三大组件之一。 设计模式按照其功能和目的可以分为三类,共计23种设计模式。这三类包括创建型、结构性和行为型。创建型模式主要...
Servlet监听器是Java Web...首先,Servlet监听器是通过实现Servlet规范定义的特定接口来创建的,这些接口继承自`javax.servlet.ServletContextListener`、`javax.servlet.http.HttpSessionListener`或`javax.servlet....
在描述中提到的博客链接虽然没有实际内容,但通常这类博客会详细讲解接口在类设计中的应用,包括如何创建接口、如何实现接口以及接口与继承的关系等。接口是Java中的单一继承机制的补充,因为Java不支持多重继承(一...
在某些场景下,我们可能会直接在需要使用接口的地方创建一个匿名内部类来实现接口,这种方式通常用于简洁的代码实现,比如事件监听器。 9. **接口与Lambda表达式**: Java 8引入的Lambda表达式可以更简洁地实现单...
在这个“JAVA 教学 PPT”中,你将详细学习如何使用Java来创建和操作接口、类和对象,以及如何构建图形用户界面。教程可能涵盖了以下内容: - 接口的声明和实现 - 类的设计原则和继承机制 - 对象的创建、初始化和...
- 定义事件监听器,如`ActionListener`、`MouseListener`等。 - 实现不同组件之间的通信,比如在设计模式中的`Observer`或`Command`模式。 - 在分布式系统中,作为服务的定义,例如在Spring框架中的远程调用。 ...
在GUI编程中,接口常用于事件处理,如Java的ActionListener,当特定事件发生时,事件监听器接口的方法会被调用。 9. **接口与泛型** 接口可以作为泛型的类型参数,这在集合框架中非常常见,如`List<MyInterface>`...
本文将对Spring监听器进行深入浅析,包括其工作原理、源码解析以及如何使用。 首先,Spring监听器是基于事件驱动模型的,这种模式在多线程和分布式系统中非常常见。在Spring中,当一个特定的事件发生时,如bean的...
例如,在事件处理中,一个对象可以注册为另一个对象的监听器,监听器通常是一个实现了特定接口的类。 ### 接口与匿名内部类 Java允许在没有声明新类的情况下创建类的实例,这种类被称为匿名内部类。当仅需一次使用...
这种设计模式常用于事件监听器或者需要对接口功能进行扩展的场景。 例如,假设我们有一个`MusicPlayer`接口,它定义了一些播放音乐的方法,如`play()`和`pause()`。在接口内部,我们可以定义一个内部类`...
在GUI编程中,接口常被用来定义事件监听器,如`ActionListener`。当用户触发某个事件时,会调用监听器接口中定义的方法。这种方式提高了代码的可读性和可复用性。 此外,Java标准库中的`java.util.Comparator`和`...