黑马程序员-面向对象复习2

本文深入探讨了C#中的继承概念,包括如何在子类中继承父类的属性和方法,以及构造方法的使用和重载。通过实例演示了如何在子类中覆盖基类方法,并解释了构造方法在类初始化过程中的作用。

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

继承:

继承描述现实世界中相互包括的对象之间的关系,如人类包括中国人和美国人,中国人包括东北人和南方人,灵长类包括人和大猩猩,哺乳动物包括灵长类和其他来,这种关系的抽象叫做继承关系。

C#中只允许单继承,但允许继承多个接口,下面是一个继承的实例:

Class Person{

int age;

string name;

public void talk(){

console.writeline("大家好我的名字叫做"+this.name);

}

}

Class student : Person{

// 暂时为空

}

虽然student目前是空白,但它已经从Person类继承了一个方法和两个字段如果这两个字段是公共的,我们可以调用子类的talk方法来输出学生的姓名。

从底层的角度看,继承的实现是一个拼接的过程,子类新添加的字段和方法被放在父类的后面,而this指针总是指向父类的第一个元素(也可能不是,但位置一般固定),继承之后,原来父类的字段可以“看成”是子类的字段,各字段的访问是隐含的this指针加上偏移量来完成了。

而类中的方法,无论静态还是动态,一般和类的字段分开存放,不计入类的总大小之内。

子类可以添加新方法和字段:

Class student : Person{

string school number;

public void gotoschool(){

...

}

}

也可以覆盖基类的方法,但要注意,覆盖时,父类的方法必须是虚方法,子类的方法必须加上override关键字:

Class Person{

int age;

string name;

public virtual void talk(){

console.writeline("大家好我的名字叫做"+this.name);

}

}

Class student : Person{

public override void talk(){

console.writeline("老师您好,我的名字叫做"+this.name);

}

}

方法的覆盖和多态的实现有密切关系,稍后介绍,下面要复习的是构造方法

构造方法是一种特殊的方法,它没有返回值而且和类名相同,类的实例通过构造函数进行类的初始化,一个类必须有构造函数,即使不显式的写出,编译器也会自动调用一个没有参数和具体实现的构造函数,如果写出显式的构造函数,那么系统默认的无参构造函数就不会被执行,构造函数可以被重载:

Class Person{

int age;

string name;

Person(){

}

Person(int age,string name){

this.name=name;

this.age=age;

}

public virtual void talk(){

console.writeline("大家好我的名字叫做"+this.name);

}

}

构造方法不需要被显式的继承,但有一点要注意,子类在调用自己的构造方法之前,会隐式的调用父类的无参构造方法(因为只有父类被构造完才能构造子类),如果父类中给出了有参数构造方法而没有给出无参构造(这时原始的无参构造被隐藏),编译器会报出一个缺少“0参数构造方法的错误”:

Class Person{

int age;

string name;

Person(int age,string name){

this.name=name;

this.age=age;

}

//没有无参数的构造方法

public virtual void talk(){

console.writeline("大家好我的名字叫做"+this.name);

}

}


Class student : Person{

student(){

...

}

public override void talk(){


console.writeline("老师您好,我的名字叫做"+this.name);

}

}

这时编译器会报错,正确的做法是在子类构造方法后加上base来调用父类的有参构造方法:

Class Person{

int age;

string name;

Person(int age,string name){

this.name=name;

this.age=age;

}

public virtual void talk(){

console.writeline("大家好我的名字叫做"+this.name);

}

}


Class student : Person{

student()base(0,null) {

...

}


public override void talk(){

console.writeline("老师您好,我的名字叫做"+this.name);

}

}

base类似于java中的super方法,用于从子类中调用父类的方法和使用父类的字段,调用构造函数用base(),一般方法用base.方法名 ()



------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值