【03】面向对象 接口 多态
📔 千寻简笔记介绍
千寻简笔记已开源,Gitee与GitHub搜索chihiro-notes
,包含笔记源文件.md
,以及PDF版本方便阅读,且是用了精美主题,阅读体验更佳,如果文章对你有帮助请帮我点一个Star
~
更新:支持在线阅读文章,根据发布日期分类。
文章目录
简介
本文关键词
类的概念
、多态
、多态优点
、多态缺点
、什么是设计模式(35种)
、接口的概念
、接口的定义
、各类型之间的关系
、接口中成员的特点
、在开发中最常用的模式
、接口和抽象类的异同(相同点、不同点)
1 类
1.1 类的概念
在面向对象编程(Object-Oriented Programming,简称OOP)中,类是一种模板或蓝图,用于创建具有相同属性和行为的对象。一个类定义了对象的属性(也称为成员变量)和方法(也称为成员函数)。它描述了对象可以执行的操作以及对象的状态。
类的特点(面向对象的三大特点)包括:
- 封装(Encapsulation):通过将数据和操作封装在一个类中,实现了对数据的隐藏和保护。外部代码只能通过类的公共接口访问和修改数据,而无法直接操作类的内部实现细节。(安全性)
- 继承(Inheritance):允许通过定义一个新类来继承已有类的属性和方法,并可在新类中增加新的功能或重写父类的方法。继承提供了代码的重用性和层次化组织结构,使得类之间建立了一种"父子"关系。(扩展性)
- 多态(Polymorphism):指在相同类型的对象上执行不同的操作,即同一个方法在不同对象上表现出不同的行为。多态性使得程序可以根据当前对象的实际类型而调用相应的方法,提高了代码的灵活性和可扩展性。(灵活性)
通过使用类,我们可以将现实世界中的实体抽象成为程序中的对象,并对其进行统一的建模和处理。类是面向对象编程的核心概念之一,它使得代码具有更好的组织性、可读性和可维护性,并提供了一种可靠而高效的方法来解决问题。
小结:类是一堆具有共同的成员变量(属性)和成员方法(功能)对象的集合。
1.2 多态
多态是对象的多态,多态是一个对象的多种状态,打个比方(你在学校是学生,在家是儿女,在公司是员工)。
什么是多态:
- 必须有字符关系(必须有继承)。
- 必须有方法的重写。
多态在java代码中的表现形式:(两种格式)
- 父类类型 变量名 = new 子类类型();
- 接口类型 变量名 = new 实现类();
注意事项:
-
使用多态调用成员变量。
- 编译/运行都看左边的父类。
-
使用多态调用成员方法
-
编译时 看
左边 父类
。 -
运行是 看
右边 子类
。
-
1.3 多态优点
- 提高了程序的灵活性。
- 父类类型的变量,可以接收任何一个子类的对象。
- 调用方法的时候,编译时看父类,运行时传递过来的子类对象中的方法。
1.3 多态缺点
多态的弊端:
-
多态只能调用子父类共有的方法。
-
*不能调用子类特有的方法。
弊端的解决方案:
- 向下转型:多态,强制类型转换 int a = (int)3.14;
- 向上转型:自动类型转换 double d = 10;
- Animal an = new Dog();
向下转型的弊端:
- 把父类的变量转成子类类型的时候编译器直接编译通过。
解决向下转型弊端的方法:
- 一个关键字instanceof 运算符。
- 作用:判断某一个变量 不是 该类的类型。
- 格式:boolean b = an instanceof 类名。
//使用instanceof运算符进行判断
boolean b =an instanceof Dog;
if(b){
Dog d = (Dog)an;
d.lookHome();
}
1.4 什么是设计模式(35种)
可以理解为规则,是共同制定用于解决问题的方案,总结的一个套路。
以下是常见的35种设计模式,按照不同的目的和使用方式进行分类:
创建型模式(Creational Patterns)
- 单例模式(Singleton Pattern)
- 简单工厂模式(Simple Factory Pattern)
- 工厂方法模式(Factory Method Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 原型模式(Prototype Pattern)
- 建造者模式(Builder Pattern)
结构型模式(Structural Patterns)
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 组合模式(Composite Pattern)
- 装饰器模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
行为型模式(Behavioral Patterns)
- 模板方法模式(Template Method Pattern)
- 命令模式(Command Pattern)
- 迭代器模式(Iterator Pattern)
- 观察者模式(Observer Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 解释器模式(Interpreter Pattern)
- 状态模式(State Pattern)
- 策略模式(Strategy Pattern)
- 职责链模式(Chain of Responsibility Pattern)
- 访问者模式(Visitor Pattern)
并发型模式(Concurrency Patterns)
- 保护性暂停模式(Guarded Suspension Pattern)
- 读写锁模式(Reader-Writer Lock Pattern)
- 生产者消费者模式(Producer-Consumer Pattern)
- 信号量模式(Semaphore Pattern)
- 同步模式(Synchronization Pattern)
- Future模式(Future Pattern)
2 接口
2.1 接口的概念
- 接口是功能的集合,就是方法的集合。
- 接口中只能定义方法,不能定义普通的成员变量。
- 而且接口中的成员方法,必须是抽象。
- 接口是比抽象类还抽象的一种类型。
- 接口不能创建对象。
- 通常叫"父接口"。
2.2 接口的定义
- 定义类用关键字:class
- 定义抽象类用关键字:abstract class
- 定义接口关键字:interface
- 定义枚举用关键字:enum
格式:
public interface 接口名字{
//成员变量,不能定义普通的成员变量
//成员方法:必须都是抽象的
public abstract 返回值类型 方法名();
}
2.3 各类型之间的关系
-
类和类之间:继承,而且是单继承,一个子类,只能有一个直接父类。
-
接口和接口之间:继承,但是可以多继承,一个子接口,可以有多个直接父接口。
-
类和接口之间:不叫继承(extends),叫实现(implements)。
-
只有类实现接口,实现implements和继承差不多,实现是把接口中的抽象方法都拿过来。
面试题:Java到底支不支持多继承?
参考:
1.如果是类与类,不支持多继承,只支持多层继承。
2.如果是接口和接口,支持多继承,也支持多层继承。
2.4 接口中成员的特点
- 成员变量(可以定义),但必须有固定的修饰符
public static final
数据类型 变量 = 值,固定修饰符可以不写,不写编译器自动添加。 - 成员方法,必须是固定工就是福
public abstract
即抽象方法。 - 接口不可以创建对象(抽象类也是)。
- 实现类去实现类接口,它必须重写接口中所有的抽象方法,然后才能创建对象,否则这个实现类还是一个抽象类,是不能创建对象的。
2.5 在开发中最常用的模式
一个类继承一个抽象类,同时实现多个接口
public class A extends AbstractClasB implments 接口A,接口B{
//注意:
// A中必须重写抽象类中的抽象方法,以及所有接口中的抽象方法
}
2.6 接口和抽象类的异同
相同点:
- 都不能创建对象。
- 都是做为父类/父接口。
- 子类/实现类/都必须重写抽象方法,然后才能创建对象。
不同点:
-
抽象类用关键字
abstract
接口用关键字interface
。 -
抽象类中可以有抽象方法,可以没有抽象方法,也可以有部分是抽象方法,部分不是抽象方法。
-
接口中只要有方法,必须都是抽象的。
-
抽象类型可以定义任意成员变量 接口的成员变量必须是
public static final
修饰。 -
类和抽象类之间的关系是单继承,类和接口之间关系是多实现。
-
思想上的区别:
- 抽象类中必须定义整个继承体系的共性内容。
- 接口类中定义整个体系之外的扩的功能。