面向对像不理解啊。

longai123 2012-10-28 11:46:13
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 虚方法
{
class C
{
public
virtual
void method()
{
Console.WriteLine("C Method!");
}
}

class D : C
{
public
override
void method()
{
//base.method();
Console.WriteLine("D Method!");
}
}
class DC : C
{
public
new
void method() //此处隐藏了父类的method方法,使用new关键 字.
{             //如不不 使用new,编译器会报警告消息,但仍然
//是隐藏父类访求method()

//base.method();
Console.WriteLine("dc method!");
}
}


class Program
{
static void Main(string[] args)
{


C cdClass =
new D();
cdClass.method();//调用D中的method(),输出(C Method! D Method!);其中C Method!是由D中的base.method()输出.
Console.WriteLine("=============");


//D dcClass = new C();//编译无法通过
//dcClass.method();
DC dcClass =
new DC();
dcClass.method();//调用DC中的method(),输出(C Method! DC Method!);此处隐藏了父类的方法
Console.WriteLine("=============");

//说明: 如果用类C修饰DC对象:
C dcClass2 = new DC();
dcClass2.method(); //调用C中的method(),输出(C Method!)
Console.WriteLine("=============");

}
}
}


C cdClass =
new D();调用的是d.method
C dcClass2 = new DC();
dcClass2.method(); 
调用的是c.method
不理解。
求大家指点。。
...全文
160 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小飛不想飛 2013-01-16
  • 打赏
  • 举报
回复
nonocast 2012-10-29
  • 打赏
  • 举报
回复
new表示重写,如果希望用D则需要override
XBodhi. 2012-10-29
  • 打赏
  • 举报
回复
那只能说, 不同的老师 和教科书 说法不一样了, 知道如何用就行了
nonocast 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
错了
new 不是重写的。
[/Quote]

我实在不知道该怎么翻译这个new,但我的理解是这个new表示无视父类中同名的方法,或者说断绝关系,改为采用自己定义的方法,重新写一个同名的方法,我不知道这个翻译有什么问题,new表示一个从新开始的意思。

而override,你可以查查牛津英英,http://oald8.oxfordlearnersdictionaries.com/dictionary/override
to use your authority to reject somebody's decision, order, etc.本身表示推翻,覆盖的意思,你去体会一些,其实把override翻译成重写是一件非常非常牵强的事情,尤其是在有了new以后,我觉得extend,扩展甚至inject插入更能表达这个意思。

英语可能会更清楚一些
The new modifier creates a new member with the same name and causes the original member to become hidden. The override modifier extends the implementation for an inherited member.

另外想问问你把override翻译成重写,你怎么翻译new,我倒是挺敢兴趣的,总不见得翻译为隐藏吧。
SocketUpEx 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
楼主:
1.封装;
2.多台;
3.继承。

你去了解这3个就知道 面向对象 和 面向过程的区别了。
[/Quote]

开闭原则
里氏代换原则
依赖倒转原则
XBodhi. 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

new表示重写,如果希望用D则需要override
[/Quote]


错了

new 不是重写的。


1.new 的功能是 创建对象。
2.new 的功能是 隐藏父类的相同名字的方法。


override 才是重写,

前提一定是 父类 有虚方法和抽象方法(一定存在在抽象类中)


楼主:
1.封装;
2.多台;
3.继承。

你去了解这3个就知道 面向对象 和 面向过程的区别了。
Hauk 2012-10-29
  • 打赏
  • 举报
回复
C cdClass =
new D();调用的是d.method

父类引用指向子类对象,如果子类重写了父类的方法,那么调用子类中重写的方法。


C dcClass2 = new DC();
dcClass2.method(); 
调用的是c.method

父类引用指向子类对象,如果子类中没有重写父类的方法,那么将调用父类中的方法。
(子类中用了new,就说明不是重写,该方法只能通过子类自己的引用来调用。)

这里就说明了接口和抽象类为什么要求在子类中必须实现所有方法
就是为了防止接口或抽象类作为父类引用指向子类对象,如果子类不重写的话,那么将调用接口或抽象类中的方法。
而接口和抽象类中只有方法声明,无法调用,就要出问题了。
第1章课程定位与教学案例综述. 1.1职业岗位能力需求分析 1.2课程设置和课程定位分析 1.3WebShop电子商城介绍 1.3.1电子商城需求分析 1.3.2电子商城系统设计 1.3.3电子商城数据库设计 1.4LibraryMIS图书管理系统介绍 1.4.1图书管理系统需求分析 1.4.2图书管理系统系统设计 1.4.3图书管理系统数据库设计 习题 第2章面向对象技术和建模基础 2.1面向对象方法 2.1.1面向对象方法的基本思想 2.1.2面向对象方法的发展 2.2面向对象的基本概念与特征 2.2.1面向对象的基本概念 2.2.2面向对象的主要特征 2.3面向对象分析 .2.3.1处理复杂问题的原则 2.3.200A方法的基本步骤 2.4面向对象设计 2.5面向对象实现 2.6面向对象方法的内涵 2.7软件建模概述 2.7.1软件建模的概念 2.7.2软件建模的用途 2.7.3软件建模的优点 习题 第3章UML简介 3.1UML的发展 3.1.1UML的发展历程 3.1.2理解UML建模 3.2UML的特点 3.3UML的结构 3.3.1UML的事物 3.3.2UML的关系 3.4UML的视图 3.4.1用例视图 3.4.2逻辑视图 3.4.3并发视图 3.4.4组件视图 3.4.5部署视图 3.5UML图形符号 3.5.1用例图 3.5.2类图 3.5.3对象图 3.5.4状态图 3.5.5活动图 3.5.6顺序图 3.5.7协作图 3.5.8组件图 3.5.9部署图 3.5.10UML 2.0新特性 3.6UML建模基本流程 习题 第4章UML建模工具简介 4.1常用UML建模工具 4.1.1 Rational Rose 4.1.2Enterprise Architect 4.1.3Together 4.1.4PowerDesigner 4.1.5 Visi0 4.1.6Tnffun Plat0 4.2Rational Rose安装与配置 4.2.1Rational Rose的运行环境 4.2.2Rational Rose的安装 4.2.3Rational Rose的配置 4.3使用Rational Rose建模 4.3.1Rational Rose主菜单 4.3.2Rational Rose的视图 4.3.3 Rational Rose建模的基本过程 习题 第5章需求建模 5.1用例模型概述 5.2用例图组成 5.2.1参与者 5.2.2系统 5.2.3用例 5.3识别和描述用例.. 5.3.1识别用例 5.3.2绘制WebShop电子商城用例图 5.3.3通过包对用例进行合理规划 5.3.4WebShop电子商城用例图(不含关系) 5.3.5用例描述 5.4用例间的关系 5.4.1泛化关系 5.4.2使用关系 5.4.3包含关系 5.4.4扩展关系 5.4.5关系小结 5.4.6WebShop电子商城用例图(含关系) 习题 第6章静态建模 6.1静态建模概述 6.2类图概述 6.3类图的基本组成 6.3.1类的概述 6.3.2绘制带属性的实体类 6.3.3绘制带操作的实体类 6.3.4绘制边界类图 6.3.5绘制控制类图 6.3.6UML中的类与语言中的类 6.4类之间的关系 6.4.1关联关系 6.4.2聚合关系 6.4.3组合关系 6.4.4泛化关系 6.4.5实现关系 6.4.6依赖关系 6.5对象图 6.5.1对象图概述 6.5.2对象图组成 6.5.3类图和对象图的比较 习题 第7章数据库建模 7.1PowerDesigner简介 7.2PowerDesigner安装和启动 7.2.1PowerDesigner的安装 7.2.2PowerDesigner的启动 7.3PowerDesigner概念数据模型 7.3.1概念数据模型概述 7.3.2PowerDesigner概念数据模型概述 7.4 PowerDesigner物理数据模型 习题 第8章动态建模 8.1动态建模概述 8.2状态图 8.2.1状态图概述 8.2.2状态图组成 8.2.3绘制员工下班回家状态图 8.3活动图 8.3.1活动图概述 8.3.2活动图组成 8.3.3绘制WebShop电子商城活动图 8.4活动图拾遗 8.4.1活动图与流程图的比较 8.4.2活动图与状态图的比较 8.5顺序图 8.5.1顺序图概述 8.5.2顺序图组成 8.5.3绘制WebShop电子商城顺序图 8.6协作图 8.6.1协作图概述 8.6.2协作图组成 8.6.3绘制WebShop电子商城协作图 8.7 顺序图拾遗 8.7.1 顺序图与协作图的比较 8.7.2 顺序图与协作图的互换 习题 第9章物理建模 9.1物理建模概述 9.1.1硬件 9.1.2软件 9.2组件图 9.2.1组件图概述 9.2.2组件图组成 9.2.3绘制WebShop电子商城组件图 9.3部署图 9.3.1部署图概述 9.3.2部署图组成 9.3.3绘制WebShop电子商城部署图 习题 第10章双向工程 10.1双向工程简介 10.2正向工程(生成Java代码) 10.3逆向工程 习题 第11章统一软件过程RUP 11.1RUP简介 11.2RUPT作流程 11.2.1业务建模 11.2.2需求 11.2.3分析设计 11.2.4实施 11.2.5测试 11.2.6部署 11.2.7配置与变更管理 11.2.8项目管理 11.2.9环境 11.3RUP迭代过程 11.3.1初始 11.3.2细化 11.3.3构造 11.3.4移交 11.3.5迭代计划示例(构造阶段) 习题 附录A综合实训 附录B Rational Rose2003主菜单 参考文献...

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧