【03】面向对象 接口 多态

【03】面向对象 接口 多态

📔 千寻简笔记介绍

千寻简笔记已开源,Gitee与GitHub搜索chihiro-notes,包含笔记源文件.md,以及PDF版本方便阅读,且是用了精美主题,阅读体验更佳,如果文章对你有帮助请帮我点一个Star

更新:支持在线阅读文章,根据发布日期分类。

简介

本文关键词

类的概念多态多态优点多态缺点什么是设计模式(35种)接口的概念接口的定义各类型之间的关系接口中成员的特点在开发中最常用的模式接口和抽象类的异同(相同点、不同点)

1 类

1.1 类的概念

在面向对象编程(Object-Oriented Programming,简称OOP)中,类是一种模板或蓝图,用于创建具有相同属性和行为的对象。一个类定义了对象的属性(也称为成员变量)和方法(也称为成员函数)。它描述了对象可以执行的操作以及对象的状态。

类的特点(面向对象的三大特点)包括:

  1. 封装(Encapsulation):通过将数据和操作封装在一个类中,实现了对数据的隐藏和保护。外部代码只能通过类的公共接口访问和修改数据,而无法直接操作类的内部实现细节。(安全性)
  2. 继承(Inheritance):允许通过定义一个新类来继承已有类的属性和方法,并可在新类中增加新的功能或重写父类的方法。继承提供了代码的重用性和层次化组织结构,使得类之间建立了一种"父子"关系。(扩展性)
  3. 多态(Polymorphism):指在相同类型的对象上执行不同的操作,即同一个方法在不同对象上表现出不同的行为。多态性使得程序可以根据当前对象的实际类型而调用相应的方法,提高了代码的灵活性和可扩展性。(灵活性)

通过使用类,我们可以将现实世界中的实体抽象成为程序中的对象,并对其进行统一的建模和处理。类是面向对象编程的核心概念之一,它使得代码具有更好的组织性、可读性和可维护性,并提供了一种可靠而高效的方法来解决问题。

小结:类是一堆具有共同的成员变量(属性)和成员方法(功能)对象的集合。

1.2 多态

多态是对象的多态,多态是一个对象的多种状态,打个比方(你在学校是学生,在家是儿女,在公司是员工)。

什么是多态:

  1. 必须有字符关系(必须有继承)。
  2. 必须有方法的重写。

多态在java代码中的表现形式:(两种格式)

  1. 父类类型 变量名 = new 子类类型();
  2. 接口类型 变量名 = new 实现类();

注意事项:

  1. 使用多态调用成员变量。

    • 编译/运行都看左边的父类。
  2. 使用多态调用成员方法

    • 编译时 看左边 父类

    • 运行是 看右边 子类

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 接口的概念

  1. 接口是功能的集合,就是方法的集合。
  2. 接口中只能定义方法,不能定义普通的成员变量。
  3. 而且接口中的成员方法,必须是抽象。
  4. 接口是比抽象类还抽象的一种类型。
  5. 接口不能创建对象。
  6. 通常叫"父接口"。

2.2 接口的定义

  1. 定义类用关键字:class
  2. 定义抽象类用关键字:abstract class
  3. 定义接口关键字:interface
  4. 定义枚举用关键字: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 修饰。

  • 类和抽象类之间的关系是单继承,类和接口之间关系是多实现。

  • 思想上的区别:

    • 抽象类中必须定义整个继承体系的共性内容。
    • 接口类中定义整个体系之外的扩的功能。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千寻简

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值