2022.3.29 接口

接口

  • 普通类:只有具体实现

  • 抽象类:具体实现和规范(抽象方法)都有!

  • 接口:只有规范!自己无法写方法~专业的约束!约束和实现分离:面向接口编程

  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是...则必须能...”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人;如果你是坏人,则必须欺负好人。

  • 接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。

  • 接口不能实例化(不能new),接口中没有构造方法(构造器)

  • OO(面向对象)的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。

声明类的关键字class,声明接口的关键字是interface

复制代码
 1  package com.oop.demo12;
 2  3  //接口都需要有实现类
 4  public interface UserServise {
 5      /*
 6      //接口中的所有的定义其实都是抽象的 public abstract
 7      //public abstract 是灰色的,接口中的方法默认带public abstract
 8      public abstract void run();
 9      void run1();//直接这样写就可以
10       */
11      void add(String name);
12      void delete(String name);
13      void update(String name);
14      void query(String name);
15 16      //默认public static final,一般不会在接口中定义常量
17      public static final int age = 99;
18  }
复制代码
1  package com.oop.demo12;
2 3  public interface TimeServise {
4      void timer();
5  }
 
复制代码
 1  package com.oop.demo12;
 2  //抽象类:extends 只能单继承
 3  //实现类    类可以实现接口,通过 implements 关键字,可以继承多个
 4  //implements 接口名
 5  public class UserServiseImpl implements UserServise,TimeServise{
 6      //实现了接口的类,就必须重写接口中的方法
 7      @Override
 8      public void add(String name) {
 9 10      }
11 12      @Override
13      public void delete(String name) {
14 15      }
16 17      @Override
18      public void update(String name) {
19 20      }
21 22      @Override
23      public void query(String name) {
24 25      }
26      @Override
27      public void timer() {
28 29      }
30 31  }
复制代码

 

接口名作为形参和返回值

方法的形参是接口名,其实需要的是该接口的实现类对象方法的返回值是接口名,其实返回的是该接口的实现类对象

1 package com.xing.test;
2 
3 public interface Inter {
4     void run();
5 }

 

1 package com.xing.test;
2 
3 public class InterImpl implements Inter{
4     @Override
5     public void run() {
6         System.out.println("跑步");
7     }
8 }

 

复制代码
 1 package com.xing.test;
 2 
 3 public class Application {
 4     public static void main(String[] args) {
 5         //接口的实现类对象
 6         Inter in = new InterImpl();
 7         in.run();//调用接口实现类对象
 8 
 9         Student s = new Student();
10         s.test1(in);//传入的参数是接口的实现类对象
11     //匿名内部类作为接口的实现类对象   省去了接口的实现类对象
12     s.test1(new Inter() {
13         @Override
14         public void run() {
15             System.out.println("匿名内部类作为接口的实现类对象");
16         }
17     });
18 
19         Inter in1 = s.test2();//返回接口实现类对象
20         in1.run();//调用实现类的方法
21     }
22 }
23 
24 class Student{
25     //接口作为形参   接口不能实例化对象(Inter i = new Inter() 不能这样写), 所以传入的参数是接口的实现类对象
26     public void test1(Inter i){//Inter in = new InterImpl();
27         i.run();
28     }
29 
30     //接口作为返回值   返回值也是接口的实现类对象
31     public Inter test2() {
32         Inter in = new InterImpl();
33         return in;
34     }
35 }
复制代码
posted @   暴躁C语言  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示