接口&多态总结
总结
接口
-
概念理解
接口是一种约定规范,是多个抽象方法的集合。仅仅只是定义了应该有哪些功能,本身不实现功能, 至于每个功能具体怎么实现,就交给实现类完成。
-
接口声明&多继承性
接口可以认为是一种特殊的类,但是定义类的时候使用 class 关键字,定义接口使用 interface 关键字。
接口名一般以I开头或者Interface结尾
接口中的方法都是公共的抽象方法
类可以继承类,但是只能单继承的,接口也可以继承接口,但是却可以继承多个接口,也就是说一个接口可以同时继承多个接口
接口实现类
-
接口实现类概念
和抽象类一样,接口是不能创建对象的,此时必须定义一个类去实现接口,并覆盖接口中的方法,这
个类称之为实现类,类和接口之间的关系称之为实现关系(implements)。
public class 类名 implements 接口名 1,接口名 2{
覆盖接口中抽象方法
}
在类实现接口后,覆盖接口中的抽象方法,完成功能代码,此时接口和实现类之间的关系:-
接口:定义多个抽象方法,仅仅定义有哪些功能,却不提供实现。
-
实现类:实现接口,覆盖接口中抽象方法,完成功能具体的实现。
-
多态
-
多态概念:
将子类对象装到父类的变量中保存(向上造型/向上转型),当父类变量调用方法的时候,如果子类重写了该方法,会直接执行子类重写之后的方法。(父类变量可以装任意类型的子类对象)。 -
多态作用:
可以屏蔽子类差异性,提高代码的扩展性(通过代码理解,不要从字面理解) -
多态使用
- 向上造型/向上转型:
语法:
父类类型 父类变量 = new 子类类型();
父类变量.方法();//子类若重写,则会执行子类重写后的方法
例如: Animal animal = new Person();//多态的方式(向上造型/向上转型) Animal animal2 = new Pig();//多态的方式(向上造型/向上转型) //调用方法 animal.eat();//吃肉... 执行子类重写后的方法 animal2.eat();//吃白菜 执行子类重写后的方法
- 向下造型/向下转型: =>就是为了调用子类特有方法
例如:(接上面案例) 现在需要调用子类Person中特有的方法或者调用子类Pig中特有的方法,不能调用怎么办? 这个时候就需要强制转换(向下造型/向下转型): 强制转换(向下造型/向下转型)语法: 数据类型 变量 = (数据类型)值/变量; 在向下造型前,必须进行类型判断,需要判断当前父类变量中装的是哪一个子类类型的对象 类型判断方式1: if(父类变量 instanceof 子类类型1){ //强制类型转换 子类类型1 子类变量 = (子类类型1)父类变量; //现在就可以调用子类特有方法 子类变量.子类特有方法(...); }else if(父类变量 instanceof 子类类型2){ //强制类型转换 子类类型2 子类变量 = (子类类型2)父类变量; //现在就可以调用子类特有方法 子类变量.子类特有方法(...); }... 类型判断方式2: if(父类变量.getClass() == 子类类型1.class){ //强制类型转换 子类类型1 子类变量 = (子类类型1)父类变量; //现在就可以调用子类特有方法 子类变量.子类特有方法(...); }else if(父类变量.getClass() == 子类类型2.class){ //强制类型转换 子类类型2 子类变量 = (子类类型2)父类变量; //现在就可以调用子类特有方法 子类变量.子类特有方法(...); }... 如果不进行类型判断再强转,就有可能发生ClassCastException类造型异常 类型判断方式2: if(父类变量.getClass() == 子类类型1.class){ //强制类型转换 子类类型1 子类变量 = (子类类型1)父类变量; //现在就可以调用子类特有方法 子类变量.子类特有方法(...); }else if(父类变量.getClass() == 子类类型2.class){ //强制类型转换 子类类型2 子类变量 = (子类类型2)父类变量; //现在就可以调用子类特有方法 子类变量.子类特有方法(...); }... 如果不进行类型判断再强转,就有可能发生ClassCastException类造型异常
- 向上造型/向上转型:
多态注意事项
- 成员变量没有多态
- 不能调用子类特有的方法,如果需要调用子类特有的方法,必须进行强制类型转换(向下造型/向 下转型),向下造型需要进行子类类型判断
- 父类变量能点(调用)出哪些成员(成员变量和方法),是由当前类和其父类决定,优先从当前类 开始查找,直到找到Object了为止,如果Object中有没有,就不能调用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)