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 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验