JAVA_面向对象知识体系
1.面向对象编程
- 面向对象编程就是一种编程方法,它的思路是把程序中的数据和对数据的操作打包成一个个“对象”,然后这些对象之间通过互相调用的方式来完成程序的功能。你可以把这些对象看成是实际生活中的物品或者人,它们都有自己的“状态”和“行为”,并且能够与其他对象进行“交亘”。
- 面向对象编程(Object-Oriented Programming,OOP)的特点包括:
- 封装性:将对象的属性和行为封装在一起,形成一个独立的实体,外部程序无法直接访问对象的内部,只能通过特定的接口(即公开的方法)来访问。
- 继承性:可以通过继承现有类的属性和方法来创建新类,从而减少代码的冗余和提高代码的复用性。继承还有助于组织类的层次结构,使代码更易于维护和扩展。
- 多态性:同样的方法在不同的对象中可以有不同的实现方式,这就是多态性。多态性使得程序更加灵活,可以在运行时动态选择不同的方法实现。
- 总的来说,面向对象编程具有代码复用性高、结构清晰、易于维护、可扩展性好等特点,因此在软件开发中广泛应用。
2.封装
- 封装就是把一些数据或者代码包装起来,让外部的程序只能通过一定的的接口乘访问和操作这些数据或者代码,而不能直接访问和修改。这样可以保证数据和代码的安全性和完整性,同时也能够降低程序的复杂度,提高代码的可维护性和可读性。
- 封装的作用:
- 隐藏实现细节:封装可以将一个类的实现细节隐藏起来,只对外暴露公共接口。这样其他类就无法直接访问该类的属性和方法,从而提高了代码的安全性。
- 简化代码调用:封装可以将一组相关的操作封装成一个方法,从而简化代码的调用。这样,在其他类中调用该方法时,只需要知道方法的名称和参数即可,不需要了解方法的具体实现。
- 提高代码复用性:封装可以将一组相关的操作封装成一个类,从而提高代码的复用性。这样,在其他类中需要使用该类的功能时,只需要创建该类的对象即可,无需重新编写相关的代码。
- 提高代码的可维护性:封装可以将一个类的实现细节隐藏起来,从而使得类的实现细节对外部代码无影响。这样,当需要修改类的实现细节时,只需要修改类内部的实现,对外部代码没有任何影响,从而提高了代码的可维护性。
3.封装
- 继承是面向对象编程中的一个重要特性,它允许我们通过创建一而无需从头开始编写代和方法。这意味着我们可以在现有类的基础上创建一个更具体的类。而无需从头开始编写代码。比如说,我们可以从一个“动物"类继承出一个“猫”类,猫就会继承动物类的一些通用属性和方法,如“呼吸”、“吃东西“等等。
- 继承有助于减少代码的冗余,因为我们可以在新的类中重用现有类的代码,同时也方便了代码的维护。另外,继承还可以帮助我们组织类的层次结构,使得类之间的关系更加清晰明
- 在继承中,我们把原来的类称为父类或基类,新创建的类称为子类或派生类。子类可以继承父类的所有属性和方法,包括公共属性和方法,但是父类的私有属性和方法子类无法继承。子类还可以在继承的基础上添加新的属性和方法,或者覆盖父类的方法,从而实现更具体的功能。
- 总的来说,继承是面向对象编程中一种非常有用的特性,它可以帮助我们减少代码的兄余组织类的层次结构,提高代码的复用性和可维护性,
- 继承的作用:
- 提高代码重用性:继承可以使得子类继承父类的属性和方法,从而减少了代码的兄余提高了代码的重用性。
- 提高代码的可维护性:继承可以将代码分解为多个层次,每个层次都可以进行单独的维护和更新,从而提高了代码的可维护性。
- 提高代码的扩展性:继承可以在不改变现有代码的情况下扩展代码的功能,从而提高了代码的扩展性。
- 实现多态:继承是实现多态的基础,子类可以重写父类的方法,从而实现多态。
- 继承中的super
在Java 中,super 关键字用于访问和调用父类的属性和方法,以及调用父类的构造方法。下面分别介绍下 super 关键字的用法: - 访问父类的属性和方法:子类可以继承父类的属性和方法,但是如果子类中有与父类同名的属性或方法,就无法直接访问父类的同名属性或方法。在这种情况下,可以使用super 关键字来访问父类的属性或方法。例如,如果父类有一个name 属性和一个speak()方法,子类可以使用super.name 和 super.speak() 来访问和调用这些属性和方法。
- 调用父类的构造方法:在子类的构造方法中,i可以使用 super() 关键字来调用父类的构造方法,以便初始化从父类继承而来的属性。子类中的构造方法必须先调用父类的构造方法,再进行子类自己的初始化。如果子类没有显式地调用父类的构造方法,Java 编译器会自动调用默认的无参构造方法。例如,如果子类有一个构造方法,需要初始化从父类继承而来的 age 属性,可以使用 super(age) 来调用父类的构造方法,并传入年龄参数。
- 继承中的访问控制符:
- 在Java 中,protected 访问控制符用于控制类的成员(字段和方法)的访问范围。protected 成员可以被同一个包中的其他类访问,也可以被不同包中的子类访问。具体来说,protected 的作用包括以下几个方面:
- 子类可以访问父类中被 protected 修饰的成员。
- 在继承关系中,子类可以访问父类中被 protected 修饰的成员,包括属性和方法。这意味着子类可以直接访问父类中的 protected 成员,而不需要使用父类对象的引用来访问。
- 同一包中的其他类可以访问被 protected 修饰的成员。protected 成员可以被同一包中的其他类访问,即使这些类不是父类或子类关系。这使得在同一个包中的不同类之间可以共享成员,提高了代码的重用性。
- protected 成员对其他包中的类是不可见的,protected 成员对其他包中的类是不可见的,即使这些类是子类也是如此。只有在子类中才可以访问父类的 protected 成员。
- 总的来说,protected 的作用是提供一种在继承关系中共享成员的方式,同时限制了对外部的访问,提高了代码的安全性和可维护性。
4.多态
- 什么是多态:
在面向对象编程中,多态(Polymorphism)是指同一类型的对象,在不同的情况下会表现出不同的行为特征,即在不同的上下文环境中具有不同的行为表现。多态是面向对象编程的重要特性之一,它可以让程序员编写出更灵活、更易于扩展的代码。 - 多态的作用:
- 代码重用:多态可以使得不同的类共享相同的代码实现,从而减少了代码的兄余,提高了代码的可维护性。
- 提高灵活性:多态可以使得同一个方法在不同的情况下具有不同的实现方式,从而使得代码更加灵活。
- 实现多态:多态是面向对象编程中的一个重要概念,它可以使得同一个方法名可以被不同的对象实现,从而实现多态。
- 简化代码:多态可以简化代码的实现,使得代码更加清晰易懂,提高了代码的可读性。
- 方法重写
方法重写是指在子类中重新定义父类中已经定义的方法,使得子类对象可以使用自己的方法实现来替换父类对象的方法实现。在调用这些方法时,程序会根据对象的实际类型来确定具体要调用哪个方法。这种方式的多态称为运行时多态或动态多态。
4.抽象类与抽象方法
- 抽象类(Abstract Class)是在面向对象编程中用来作为其他类的基类(父类)的一种特殊类,它不能直接被实例化,只能被继承,而且必须被子类实现其抽象方法。抽象类不能被实例化是因为它可能包含一些未被实现的抽象方法,这些方法只是声明了方法签名,但没有实现方法体,因此不能被直接调用。如果一个类继承了一个抽象类,那么它必须实现所有的抽象方法,否则也必须声明为抽象类。
- 抽象类的作用:
- 定义规范:抽象类定义了一些通用的属性和方法,以供子类继承和实现。这种规范可以被多个类实现,从而实现代码的复用性。
- 实现多态:抽象类可以用来实现多态,即同一个方法名,不同的实现。子类继承抽象类后,必须实现其中的抽象方法,从而实现多态。
- 降低耦合:抽象类可以将一个类的实现与其接口分离,从而降低代码的耦合性,提高代码的灵活性和可扩展性。
- 增强安全性:抽象类可以用来限制某些代码的访问权限,从而增强代码的安全性。
- 代码重构:当我们需要对某个类进行重构时,可以将其中的一些通用的属性和方法提取到一个抽象类中,从而使得代码更加清晰和易于维护。
- 抽象方法(Abstract Method)是一种没有实现的方法,它只有方法签名,没有方法体,用abstract 关键字修饰,它必须在抽象类中声明。在一个抽象类中,可以包含抽象方法和具体方法(有方法体的方法)。抽象方法必须被声明在抽象类中,而具体方法可以在抽象类中实现或者在具体的子类中实现。一个子类必须实现它从父类继承的所有抽象方法,除非该子类也是抽象类。如果一个子类继承了一个抽象类,那么它必须实现所有的抽象方法,否则也必须声明为抽象类。
5.接口与内部类
- 在Java 中,接口(Interface)是一种抽象类型,它是一组抽象方法的集合,没有方法体只有方法名、参数列表和返回类型。接口可以看作是一种约定或契约,规定了一个类或多个类应该提供哪些方法,但是并不关心这些方法是如何实现的。接口可以被看作是一个完全抽象的类,它不能被实例化,但是可以被实现。一个类通过实现接口,来承诺实现接口中定义的所有方法。这种实现接口的类,称为接口的实现类(Implementation Class)。
- 接口的作用:
- 定义规范:Java接口定义了一组方法的规范,它规定了某些类需要实现哪些方法。这种规范可以被多个类实现,从而实现代码的复用性。
- 实现多态:Java接口可以用来实现多态,即同一个方法名,不同的实现。➌ 降
- 降低耦合:Java接口可以将一个类的实现与其接口分离,从而降低代码的耦合性,提高代码的灵活性和可扩展性。
- 增强安全性:Java接口可以用来限制某些代码的访问权限,从而增强代码的安全性。
- 促进分布式编程:lava接口可以用来定义网络协议或者API,从而促进分布式编程的发展。
- 内部类指的是定义在另一个类内部的类,它可以访问外部类的成员变量和方法,也可以被外部类访问。我们可以将内部类看作外部类的一个成员,就像一个成员变量或者成员方法样。内部类分为成员内部类、静态内部类、局部内部类和匿名内部类四种类型。它们的作用包括实现封装性、隐藏性、代码组织性和实现回调等功能。
- 内部类作用:
- 实现封装性:内部类可以访问外部类的私有属性和方法,从而实现封装性。
- 实现隐藏性:内部类可以隐藏实现细节,对外部类提供简洁的接口。
- 代码组织性:内部类可以将相关的代码组织在一起,提高代码的可读性和可维护性。
- 实现回调:内部类可以用来实现回调机制,即将一个对象传递给另一个对象,在后者发生某些事件时调用前者的方法。
- 实现多重继承:lava不支持多重继承,但是通过内部类可以模拟实现多重继承的功能。
- 实现接口的某些方法:内部类可以实现外部类或者其他类的接口的某些方法。