重载/重写 - 继承,多态,封装 - 属性/成员变量 - 类别

本文介绍了面向对象编程中的封装、继承和多态等核心概念,并详细解释了函数重载与重写的区别,以及如何通过属性和成员变量进行数据访问。

函数的重载:函数方法的函数名相同,参数的列表不同(列表包括:参数的个数和参数的类型),函数返回值可相同可不同。函数的重载适用于同一个类中的不同函数,也适用于父类和子类中的函数

函数的重写:重写是相对于父类和子类之间的,函数的重写指的是子类不想继承使用父类中的函数方法所实现的内容,所以重写同一个函数方法的实现来对函数进行内部实现的函数覆盖,又称为函数覆盖;即:函数名相同,参数列表一致(参数的个数和类型一致),函数的返回值一致。

函数的重写中提到的继承使用 - 这个继承是OC面向对象的三大特性之一。

OC面向对象的三大特性:封装;继承;多态

封装:可以理解为函数方法的外露 - 在类的两个文件中(.h 和 .m)的 .h 中进行方法的声明 .h 的内容相当于public 方法  是外露在外面的供使用者调取使用的,方法可以被外部使用;而方法的实现放在 .m 中, .m 相当于Private 私有的 不能够被外界看到和使用的 

继承: 我们所说的子类和父类就是一种继承关系(子类又称为“派生类”   父类又称为“基类”或者“超类”)(平时我们在创建新的控制器时总会选择UIViewController为父类,我们自己命名的控制器名为子类),子类继承了父类所有的内容,同时能够在子类中进行其他的不同于父类中的方法创建等操作,这些操作不会对父类产生影响;而父类中函数方法的变化,子类中会发生相同的变化。(简单来说就是 - 父类变化影响子类,子类变化不影响父类)

多态:多态的理解就是在继承的基础上(即父类和子类这种关系上)一个父类下面可以有多个子类继承自这个父类   然后对父类中同一个函数方法进行函数的重写,讲函数内部的实现进行改变;然后父类的指针可以指向子类对象,进而能够调用不同子类内部重写过的函数方法,以达到实现不同内容的展现效果。(例如:继承自UIView的两个子类ViewA和ViewB,相同的初始化方法,但是内部A里创建了一个按钮button;而B里创建了一个Label,然后父类的UIView可以通过,UIView *a =[ [ViewA alloc]init],UIView *b =[ [ViewB alloc]init];  父类指针指向子类的对象,从而能够通过初始化获取到不同的展示效果

看过了继承和重写之后,可能对继承和重写的定义有些许的疑问 - 重写是对于函数来说的,是对函数方法内部实现的一种重新实现;而继承是对于类来说的,父类和子类,子类继承了父类。子类内部继承了父类的函数方法,子类内部对函数方法实现的修改,是函数的重写

属性:声明一个属性,系统会默认分配读取函数(set,get方法),可以通过点运算符来调用存取方法,并且会产生一个以_开头的成员变量

成员变量:声明一个成员变量,系统不会分配读取函数,不会产生连带的存取的方法

属性和成员变量的不同点在于:属性可以通过存取函数被外部调用,而成员变量不能够被外部调用,只有设置为public才可被外部调用

类别:类别分为category和extension,实现了对类的扩展 - category可以在不了解源码的情况下,对类的方法进行扩展,可以对该类增加新的方法,但是不能增加或改变该类的属性  ; 而extension是category的一种匿名  就能够改变类的方法  也能够改变类的属性

类别和继承的异同点:同 - 都实现了对类的扩展  不同 - 类别是相对于该类(该类可以是父类,可以是子类)来说的,改变了该类的方法;而继承是仅限于对子类来说的,改变了子类的内容,仅对子类起作用,而对于父类来说,没有变化

内容概要:本文介绍了一种基于蒙特卡洛模拟拉格朗日优化方法的电动汽车充电站有序充电调度策略,重点针对分时电价机制下的分散式优化问题。通过Matlab代码实现,构建了考虑用户充电需求、电网负荷平衡及电价波动的数学模【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)型,采用拉格朗日乘子法处理约束条件,结合蒙特卡洛方法模拟大量电动汽车的随机充电行为,实现对充电功率时间的优化分配,旨在降低用户充电成本、平抑电网峰谷差并提升充电站运营效率。该方法体现了智能优化算法在电力系统调度中的实际应用价值。; 适合人群:具备一定电力系统基础知识Matlab编程能力的研究生、科研人员及从事新能源汽车、智能电网相关领域的工程技术人员。; 使用场景及目标:①研究电动汽车有序充电调度策略的设计与仿真;②学习蒙特卡洛模拟与拉格朗日优化在能源系统中的联合应用;③掌握基于分时电价的需求响应优化建模方法;④为微电网、充电站运营管理提供技术支持决策参考。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注目标函数构建、约束条件处理及优化求解过程,可尝试调整参数设置以观察不同场景下的调度效果,进一步拓展至多目标优化或多类型负荷协调调度的研究。
内容概要:本文围绕面向制造业的鲁棒机器学习集成计算流程展开研究,提出了一套基于Python实现的综合性计算框架,旨在应对制造过程中数据不确定性、噪声干扰面向制造业的鲁棒机器学习集成计算流程研究(Python代码实现)及模型泛化能力不足等问题。该流程集成了数据预处理、特征工程、异常检测、模型训练与优化、鲁棒性增强及结果可视化等关键环节,结合集成学习方法提升预测精度与稳定性,适用于质量控制、设备故障预警、工艺参数优化等典型制造场景。文中通过实际案例验证了所提方法在提升模型鲁棒性预测性能方面的有效性。; 适合人群:具备Python编程基础机器学习基础知识,从事智能制造、工业数据分析及相关领域研究的研发人员与工程技术人员,尤其适合工作1-3年希望将机器学习应用于实际制造系统的开发者。; 使用场景及目标:①在制造环境中构建抗干扰能力强、稳定性高的预测模型;②实现对生产过程中的关键指标(如产品质量、设备状态)进行精准监控与预测;③提升传统制造系统向智能化转型过程中的数据驱动决策能力。; 阅读建议:建议读者结合文中提供的Python代码实例,逐步复现整个计算流程,并针对自身业务场景进行数据适配与模型调优,重点关注鲁棒性设计与集成策略的应用,以充分发挥该框架在复杂工业环境下的优势。
### Java 面向对象进阶:封装继承多态 #### 封装 封装是一种保护数据的方式,通过将属性设置为私有(`private`),并提供公共的 getter setter 方法来控制对这些属性的访问。这种方式不仅提高了安全性,还增强了代码的可维护性。 以下是封装的一个简单示例: ```java public class Person { private String name; private int age; // Getter and Setter methods public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { if (age >= 0 && age <= 120) { // 数据校验逻辑 this.age = age; } else { System.out.println("年龄范围不合法!"); } } } ``` 上述代码展示了如何利用 `private` 关键字隐藏类的内部状态,并通过公有的方法对外部世界暴露有限的操作接口[^2]。 --- #### 继承 继承允许一个类基于另一个类进行扩展,从而实现代码复用。子类可以通过 `super()` 调用父类的方法或构造函数。需要注意的是,在 Java 中,一个类只能单继承,但可以实现多个接口。 下面是一个简单的继承例子: ```java class Vehicle { protected String brand = "Ford"; public void honk() { System.out.println("Tuut, tuut!"); } } class Car extends Vehicle { private String modelName = "Mustang"; public static void main(String[] args) { Car myCar = new Car(); myCar.honk(); // 使用从Vehicle继承下来的方法 System.out.println(myCar.brand + " " + myCar.modelName); } } ``` 在这个例子中,`Car` 类继承自 `Vehicle` 类,因此它可以调用父类中的 `honk()` 方法以及访问其受保护字段 `brand`[^4]。 --- #### 多态 多态是指同一个操作作用于不同的对象上会产生不同效果的能力。它通常表现为方法重载(Compile-time Polymorphism)方法覆盖(Runtime Polymorphism)。在运行时动态绑定的情况下,实际执行哪个版本取决于具体实例化的对象类型。 以下是一段展示多态特性的代码片段: ```java // 定义基类 class Animal { public void makeSound() { System.out.println("Some generic animal sound"); } } // 子类重写makeSound() class Dog extends Animal { @Override public void makeSound() { System.out.println("Bark"); } } class Cat extends Animal { @Override public void makeSound() { System.out.println("Meow"); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Animal(); Animal myDog = new Dog(); Animal myCat = new Cat(); myAnimal.makeSound(); myDog.makeSound(); myCat.makeSound(); } } ``` 这段程序说明了即使声明变量时使用的都是同一类型的引用 (`Animal`),但由于指向的实际对象不同,最终的行为也会有所差异。 --- #### 总结 - **封装** 提供了一种机制来隐藏对象的状态细节,仅暴露出必要的交互方式。 - **继承** 是一种强大的特性,能够促进代码复用的同时减少冗余。 - **多态** 则赋予开发者灵活性去设计更加通用且易于扩展的应用架构。 以上就是关于 Java 面向对象三大核心概念——封装继承多态的一些基础介绍及其应用案例分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值