当前位置:   article > 正文

JAVA基础——接口_java 接口

java 接口

 目录

一、接口的概念

二、接口的基本使用

三、接口的实现

四、使用接口实现多态

五、继承类并实现多个接口

六、接口的继承

七、常量接口

八、接口的回调


一、接口的概念

        定义了一套方法的声明的规范的结构称为接口

        接口的作用:

  • 补充java中单继承的不足之处,来模拟实现“多继承”。
  • 规范一套方法的定义,以便实现多人协作。

二、接口的基本使用

        接口的基本语法:

                interface 接口名{

                        //可以定义属性

                        //可以声明方法        

                } 

特点:

  • 接口中所有定义的属性都默认为public static final,必须要赋值。
  • 接口中所有声明的方法都默认为public static,此时可以省略。
  • 接口不能直接创建对象使用。
  • 接口中的方法都是抽象的,只能声明不能实现。
  1. public interface A {
  2. //接口中所有方法默认为public static,此时可以省略
  3. //接口中的方法是抽象的,只能声明不能实现
  4. void m1();
  5. void m2();
  6. //接口中定义的变量默认为public static final,必须要赋值
  7. int COUNT = 5;
  8. }

 面试问题:接口和抽象类的区别:

        相同点:1、可以声明抽象方法。2、不能直接创建对象

        不同点:1、抽象类可以定义普通属性,接口中属性都是public static final。

                       2、抽象类可以声明普通方法,接口中方法都是public static。

                       3、抽象类可以有构造方法、代码块,接口中不能定义这些。

三、接口的实现

  1. /*接口的实现,使用implements*/
  2. public class B implements A{
  3. @Override
  4. public void m1() {
  5. System.out.println("接口中的m1方法");
  6. }
  7. @Override
  8. public void m2() {
  9. System.out.println("接口中的m2方法");
  10. }
  11. //A接口中有两个方法,如果只在B中实现一个方法,则当前类必须是抽象类,即需要将B类定义为抽象类
  12. }

四、使用接口实现多态

        实例:找具有飞行能力的对象来进行飞行表演

  1. /*定义接口*/
  2. public interface Flyable {
  3. void Fly();
  4. }
  1. /*定义具备飞行的能力的类*/
  2. public class Bird implements Flyable{
  3. @Override
  4. public void Fly() {
  5. System.out.println("鸟在飞");
  6. }
  7. }
  1. public class Plane implements Flyable{
  2. @Override
  3. public void Fly() {
  4. System.out.println("飞机在进行飞行表演");
  5. }
  6. }
  1. public class Angle implements Flyable{
  2. @Override
  3. public void Fly() {
  4. System.out.println("天使在进行飞行表演");
  5. }
  6. }
  1. /*需要人去寻找飞行能力的对象*/
  2. public class Person {
  3. //在方法中使用参数类型是接口类型,表示只需要具备飞行能力的对象,都可以来进行飞行表演
  4. public void doEvent(Flyable f){
  5. f.Fly();
  6. }
  7. }

测试:

  1. public class TestFly {
  2. public static void main(String[] args) {
  3. Person person = new Person();
  4. Flyable f = new Plane();
  5. Flyable b = new Bird();
  6. Flyable a = new Angle();
  7. person.doEvent(f);
  8. person.doEvent(b);
  9. person.doEvent(a);
  10. }
  11. }

结果:

五、继承类并实现多个接口

        实例:狗继承动物类,并实现奔跑和游泳的接口

  1. /*声明动物类*/
  2. public abstract class Animal {
  3. public abstract void eat();
  4. public abstract void sleep();
  5. }
  1. /*声明跑的接口*/
  2. public interface Runnable {
  3. void run();
  4. }
  1. /*声明游泳的接口*/
  2. public interface Swimmable {
  3. void swim();
  4. }
  1. /*继承动物类并实现多个接口*/
  2. public class Dog extends Animal implements Runnable,Swimmable{
  3. @Override
  4. public void swim() {
  5. System.out.println("狗在游泳");
  6. }
  7. @Override
  8. public void run() {
  9. System.out.println("狗在跑");
  10. }
  11. @Override
  12. public void eat() {
  13. System.out.println("狗在吃");
  14. }
  15. @Override
  16. public void sleep() {
  17. System.out.println("狗在睡觉");
  18. }
  19. }

 测试:

  1. public class Test {
  2. public static void main(String[] args) {
  3. Animal animal = new Dog();
  4. animal.eat();
  5. animal.sleep();
  6. Runnable r = new Dog();
  7. r.run();
  8. Swimmable s = new Dog();
  9. s.swim();
  10. }
  11. }

结果:

六、接口的继承

        接口可以继承其他接口,甚至可以继承多个接口。在实现该接口时,需要实现该接口中声明的所有方法。包括继承过来的方法。

  1. public interface A {
  2. //接口中所有方法默认为public static,此时可以省略
  3. //接口中的方法是抽象的,只能声明不能实现
  4. void m1();
  5. void m2();
  6. //接口中定义的变量默认为public static final,必须要赋值
  7. int COUNT = 5;
  8. }
  1. public interface E{
  2. void m4();
  3. }
  1. //继承多个接口
  2. public interface C extends A,E{
  3. void m3();
  4. }
  1. //接口的继承,并实现接口中所有声明的方法
  2. public class D implements C{
  3. @Override
  4. public void m1() {
  5. }
  6. @Override
  7. public void m2() {
  8. }
  9. @Override
  10. public void m3() {
  11. }
  12. @Override
  13. public void m4() {
  14. }
  15. }

七、常量接口

        因为在接口中定义的所有变量自动被编译成public static final,即为常量。所以接口是定义常量的一个很好的地方。在项目中经常会把常量全部定义在一些接口中,这些接口中没有定义方法,被称为常量接口。

八、接口的回调

        案例:  老师安排学生写作业。

                     学生写作业。

                     写完作业提交。

                     老师批改作业。

在此案例中,老师调用管理的学生的方法,在学生执行该方法的过程中,又需要调用老师的方法。此时就出现了回调。

如果在学生类中将回调的类型直接声明为老师,则无法实现多态,其他的非老师的对象无法安排学生写作业。

此时可以定义一个接口,在接口中声明一个回调的方法。所有实现该接口的类的对象都可以用来此处进行回调。

  1. public interface Callback {
  2. void checkHomework();
  3. }
  1. public class Teacher implements Callback{
  2. //老师对象中有管理的学生属性
  3. private Student student;
  4. //通过构造方法设置学生属性
  5. public Teacher(Student student){
  6. this.student = student;
  7. }
  8. /*安排作业*/
  9. public void doEvent(){
  10. System.out.println("老师安排作业");
  11. student.doHomework(this);
  12. }
  13. /*批改作业*/
  14. @Override
  15. public void checkHomework(){
  16. System.out.println("老师批改作业");
  17. }
  18. }
  1. public class Student {
  2. public void doHomework(Callback t){
  3. System.out.println("学生写作业");
  4. System.out.println("学生提交作业");
  5. t.checkHomework();
  6. }
  7. }
  1. public class TestCallBack {
  2. public static void main(String[] args) {
  3. Student student = new Student();
  4. Teacher teacher = new Teacher(student);
  5. //老师布置作业
  6. teacher.doEvent();
  7. }
  8. }

 结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/464109
推荐阅读
相关标签
  

闽ICP备14008679号