面向对象三大特性
Java 面向对象编程三大特性:封装 继承 多态
封装
封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
封装隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性
封装的好处:
模块化:一个对象的源代码可以独立于其他对象的源代码来编写和维护。一旦创建,一个对象就可以很容易地在系统内部传递。
信息隐藏:通过仅与对象的方法交互,其内部实现的细节对外界保持隐藏状态。
代码重用:如果一个对象已经存在(可能是由另一个软件开发人员编写的),您可以在您的程序中使用该对象。这允许专家实施/测试/调试复杂的、特定于任务的对象,然后您可以相信这些对象可以在您自己的代码中运行。
可插入性和调试容易:如果某个特定对象被证明是有问题的,您可以简单地将它从您的应用程序中删除并插入一个不同的对象作为它的替代品。这类似于解决现实世界中的机械问题。如果螺栓断裂,您可以更换它,而不是整台机器。
现在 封装
在项目中的体现已经不那么明显了,之前的封装主要是指将程序打成dll
文件,其他程序员如果需要的话,直接调用就好,dll
文件里的内容根本看不到
访问修饰符
相关博客:
继承
继承这两个字可能会让人们想到父子关系,但是我个人对“继承”两个字的理解是,站在巨人的肩膀上更进一步
按照如此理解的话,“巨人”在Java中就被称为 父类、超类或基类;站在基类肩膀的类就称作 子类或导出类
基类可以被认为是一个“泛化”的类,而子类是具体的实现
例如在处理图形的时候,我们可以创建一个几何形
的类,将一些通用的方法都写在该类里
然后我们在处理具体的图形的时候,可以使它们继承几何形
这个类,例如:三角形,正方形,五角形
这些导出类的方法拥有父类的方法后,可以默认使用父类的方法逻辑,也可以拥有自己独特的方法逻辑,这个步骤就叫做重写
例如获取图形的面积,那么有些图形因为公式的不同,可能就需要拥有自己的处理方式
而导出类不仅可以覆盖掉基类的方法逻辑,还可以有自己的方法
例如圆形
这个类,就可以有属于自己的方法,去求圆形
类的对象的半径和直径
多态
多态存在的意义主要体现在通用性方面,无论子类有多少,通用的逻辑都不变
只需要处理基类就好,详情见代码示例
我们把导出类当做是基类来处理,这个过程称为向上转型(自动转型)
代码示例
public class Main{
// 这里直接将基类作为参数就好,无论子类有多少,都不需要修改通用逻辑
public static void mainShout(Animal animal){
animal.shout();
}
public static void main(String[] args) {
mainShout(new Animal());
mainShout(new Cat());
mainShout(new Dog());
}
}
class Animal{
void shout(){
System.out.println("我是动物");
}
}
class Cat extends Animal{
void shout(){
System.out.println("喵");
}
}
class Dog extends Animal{
void shout(){
System.out.println("汪");
}
}