第四章 面向对象编程

合集下载

第四章 面向对象编程(三)

第四章 面向对象编程(三)

43
定义类CCircle实现接口


Class CCircle implements CircleCal{ double clength(double r){ return 2*PI*r; } double carea(double r){ return PI*r*r; }
44
5.没有实现父类中所有抽象方法的类,也是抽象类。
8
抽象类实例
public abstract class Car{
private double price;
pribate String brand;
private int speed;
public class CarDemo{
}
public static void main(String[] args){ 抽象类不 Car c=new Car(); }}//编译能否通过?? 能被实例 化
抽象类练习:

定义一个描述宠物的抽象类Pet,包含重 量(weight)和年龄(age)两个成员变 量和显示宠物资料的showInfo和获取宠 物资料的getInfo两个抽象方法。
19
生活中的接口

电脑主板上的PCI插槽的规范就类似于Java 接口
声卡
网卡
主板
显卡
每种卡的内部结构都不相同,可以把声卡、 网卡、显卡都插在PCI插槽上,而不用担心哪 个插槽是专门插哪个卡的
41
练习:


创建一个接口 CircleCal,其中有: 一个数据成员 pi=3.1415 一个方法 clength,求圆周长 一个方法 carea,求园面积 一个方法 cvolum,求球的体积 并创建一个类CCircle ,实现该接口

Python基础与大数据应用 第四章 面向对象编程基础

Python基础与大数据应用 第四章 面向对象编程基础

当定义了一个类以后就产生了一个类对象。类对象可以进行两种操作:一种是引用,即通过类本身这个对象来引用(访 问)类中的属性或方法,如, Car. price, Car. Drive;另外一种是实例化,即通过类来产生一个具体的实例对象,
然后通过实例对象来访问类中定义的属性或方法。
5
类和对象
>>> Car.show(car2)
#通过类名调用实例方法时为self参数显式传递对象名,访问实例属性
self.__ name:benz
Car.__ distance: 2 13
属性与方法
①Python中类的构造函数(即构造方法)是__init__(self,….),一般用来为对象属性设
print("self.__name",self.__name)
print("Car.distance",Car.__distance)
@classmethod
#修饰器,声明类方法
def classShowdistance(cls):
#类方法
print(cls.__distance)
@staticmethod
#修饰器 ,声明静态方法
def staticShowdistance():
#静态方法
print(Car.__distance)
>>> car1 = Car('passat')
>>> car1.classShowdistance ()
#通过实例对象来调用类方法
1
>>> car1.staticShowdistance ()
'red'

第四章 面向对象程序设计基础

第四章 面向对象程序设计基础
面向对象的软件开发过程分为:面向对 象分析、面向对象设计、面向对象实现
OOA
OOD
OOP
面向对象的基本概念——对象 对象 面向对象的基本概念
对象具有两方面的含义:
在现实生活中
客观世界的实体
在计算机程序中
程序中对象就是一组变量和相 关方法的集合,其中变量表明 对象的状态,方法表明对象所 具有的行为。
import语句 语句
引入包中的类。 import java.io.File; 引入整个包。 import java.io.*; 在同一包中的类可以互相引用,无需 import语句。
访问控制修饰符
修饰符 public protected default private 任何地方 √ 子类中 √ √ 同包中 √ √ √ 本类中 √ √ √ √
第四章 面向对象程序设计基础
面向对象编程基础——程序语言的发展 程序语言的发展 面向对象编程基础
面向机器( 面向机器 机器语言、汇编语言) – 汇编是对机器语言的抽象。 – 可读性、可维护、移植性差;效率高。 面向过程 – 面向过程语言是对汇编的抽象。 – 核心:算法 + 数据结构 – 缺陷: 随着应用程序的规模扩大,操作与数据分离所带来的维护工作 量越来越大 不适用于GUI界面、事件驱动编程 是对现实问题的抽象。 面向对象 是对现实问题的抽象。
void brake() { … } void speedUp() {…} void slowDown() { … }
抽象数据类型
面向对象与面向过程区别
面向过程:第一步干什么,第二步干什 么,第三。。。。。 面向对象:一共有几个对象,对象之间 都是什么关系? 面向对象的基本思想是:从现实世界中 客观存在的事物出发来构造软件系统. 并在系统的构造中尽可能运用人类的自 然思维方式.

java程序设计 第四章 内容提纲汇总

java程序设计 第四章 内容提纲汇总

注意:①创建对象的意思是在内存中按类的格式开辟
一个空间。这个空间既有属性空间,又有方法空间。 ②同类的不同对象占用不同的内存空间 创建变量与创建对象示意图
第4章 面向对象编程
2、对象初始化的说明 (1)系统如何对变量初始化 一个变量若在声明后没有赋值而直接使用该变量, 则会出错
同样,用new创建一个对象时,系统会为对象中 的变量进行初始化。系统不但会为对象中的变量分配 内存,同时还为它们设置相应的初值 byte、short、int、long类型变量设初值为0 Float类型变量设初值为0.0f Double类型变量设初值为0.0 Char类型变量设初值为‘\u0000’ Boolean为false; 引用类型初值为null
第4章 面向对象编程
B、修饰方法—公共方法: 公共方法是类的对外接口,它允许其它类或程序 调用 C、修饰域—公共域(公共属性、公共变量):
用public修饰变量,会造成安全性和数据的封装
性下降
第4章 面向对象编程
2)、私有访问控制符:private 用private修饰的属性和方法只能被自身类访问 和修改。它不能被其它类(包括该类的子类)访问和修 改 说明: ①享有最高级别的保护,是类的私有成员 ②其它类若想获得和修改私有成员时,要通过 类的方法
◆封装是抽象的具体体现,它利用操作方法把数据 封装到类中;形成以数据为核心,以方法为外壳的类。
◆继承是一个类继承父类的所有非私有的属性和方 法,它可以提高代码的重用性。 ◆对象是类的实例化的结果,是类的具体化,利用 对象的引用可以使用类的属性和方法完成任务。
第4章 面向对象编程
§4.3 成员变量与封装
态,解决问题)
第4章 面向对象编程
面向对象的方法解决问题的基本过程 对象 实 例 ③ 化 类 实体

面向对象编程技术第四章-文档资料

面向对象编程技术第四章-文档资料

说明:
关键字public后面声明公有类型成员 它们是类与外部的接口,任何外部函数都可以访问公有类 型数据和函数 关键字private后面声明私有类型成员
允许本类中的函数访问,类外部的任何函数都不能访问。 紧跟在类名称的后面声明私有成员,关键字private可省略 (不提 倡)
1.
2.
说明:
3.
保护类型与private类似,其差别表现在继承与派生时对派 生类的影响不同,在第七章介绍。
下页 例子
构造函数,后面介绍 class circle { public: circle::circle(int r) { radius=r; } int area() { return (int)3.14*radius*radius;
} void circle_prt() { cout<<"the private radius is:"<<radius<<endl; } void main() private: { int radius; circle circle1(1),circle2(3); };
3. 利用类易于编写大型复杂程序,其模块化程度比 C中采用函数更高。
慢慢体会…
2. 类的定义:
类是一种用户自定义类型,声明形式: class 类名 { public: 公有成员(外部接口) private: 私有成员 protected: 保护型成员 }
时钟类的成员 (数据成员与函数成员声明) class Clock 数据成员 {private: int Hour, Minute, Second; public: void SetTime(int NewH, int NewM, int NewS); void ShowTime( ); };

面向对象编程技术第四章

面向对象编程技术第四章
•面向对象编程技术第四章
说明:
3.保护类型与private类似,其差别表现在继承与派生时对派 生类的影响不同,在第七章介绍。
下页 例子
•面向对象编程技术第四章
class circle {
public: circle::circle(int r)
{ radius=r;
}
构造函数,后面介绍
int area()
1. 成员函数分类 (1)构造函数与析构函数
2.不能在定义时初始化赋值
(2)其他成员函数
定义成员时并不分配存储空间, 如 int hour=0
2. 在类中说明原形,在类外给 出函数体实现,并在函数名前 使用类名加以限定。也可以直 接在类中给出函数体
允许声明重载函数和带缺省形
参值的函数
建议定 义在类
•面向对象编程技术第四章
}
•面向对象编程技术第四章
时钟类的成员(数据成员与函数成员声明)
class Clock
{private:
数据成员
int Hour, Minute, Second;
public:
void SetTime(int NewH, int NewM, int
NewS); void ShowTime( ) ;
{
return (int)3.14*radius*radius;
ERROR! 不允
} void circle_prt()
许访问私数 据!如何解决?
{
cout<<"the private radius is:"<<radius<<endl;
} private:
int radius;

第四章 面向对象(上)

第四章 面向对象(上)

②构造方法时在产生对象时被Java系统自动调用的,我们不能在程序 中像调用其他方法一样去调用构造方法,但是可以在一个构造方法中调用其 他重载的构造方法,不是用构造方法,而是用this(参数列表)的形式,根 据其中的参数列表,选择相应的构造方法。 public class Person { String name; int age; public Person(String name) { =name; } public Person(String name,int age) { this(name); this.age=age; } }
2、类与对象
1)类的定义 类可以将数据和方法封装在一起,其中数据表示类的属性,方法表示类的 行为。定义类就是要定义类的属性与行为(方法)。 例子:TestPerson.java
2)对象的产生与使用
仅有设计图是无法实现汽车的功能的,只有产生了实际的汽车才行,同样 地,要实现类的属性和行为,必须创建具体的对象。要创建新的对象,需要使 用new关键字和想要创建对象的类名,如:Person p1=new Person();等号 左边以类名 Person 作为变量类型定义了一个变量 p1 ,来指向等号右边通过 new关键字创建的一个Person类的实例对象,变量p1就是对象的引用句柄, 对象的引用句柄是在栈中分配的一个变量,对象本身是在堆中分配的。 例子:TestPerson.java
知识点
1.面向对象的概念 2.类与对象 3.方法与方法的重载 4.构造方法 5.This引用句柄 6.垃圾回收 7.Static关键字 8.包 9.继承
1、面向对象的概念
1)面向过程 在早期出现的编程语言中,如C语言,要用来定义一个复杂的数据 类型,譬如 Windows 窗口时,可以用结构体来实现,只要在结构体 中使用那些基本的数据类型来定义窗口的大小、位置、颜色、背景等 属性就可以了。如果要对一个 Windows窗口进行各种操作,如隐藏 窗口、移动窗口、最小化窗口等,就要为每个操作都定义一个函数, 这 些 函 数 与 窗 口 本 身 的 定 义 没 有 任 何 关 系 , 如 HideWindow 、 MoveWindow、MinimizeWindow,这些函数都需要接收一个参数, 即要操作的窗口。这是一种谓语与宾语的关系,“隐藏”、“移动” 等都是谓语,“窗口”是宾语。程序重心集中在函数(即谓语)上。

Java面向对象程序设计第4章_类与对象

Java面向对象程序设计第4章_类与对象
例4722共52页46static关键字用static修饰的变量类变量没有用static修饰的变量实例变量方法声明中用static修饰的方法类方法方法声明中不用static修饰的方法实例方法23共52页461实例变量和类变量的区别如果类中有类变量那么所有对象的这个类变量都分配给相同的一处内存改变其中一个对象的这个类变量会影响其它对象的这个类变量
值的级别不可以高于该参数的级别 。
例4-4
public class Rect { //负责创建矩形对象的类 double width,height,area; void setWidth(double width) { if(width>0){ this.width=width; }} void setHeight(double height) { if(height>0){ this.height=height; } } double getWidth(){ return width; } double getHeight(){ return height; } double getArea(){ area=width*height; return area; }}
1.对成员变量的操作只能放在方法中,方 法可以对成员变量和该方法体中声明的局部变 量进行操作。 2.需要注意的是:实例方法既能对类变量操 作也能对实例变量操作,而类方法只能对类变 量进行操作。 3.一个类中的方法可以互相调用,实例方法 可以调用该类中的其它方法;类中的类方法只 能调用该类的类方法,不能调用实例方法。
给类命名时,遵守下列编程风格(这不是语法要求 的,但应当遵守):
◆ 1.如果类名使用拉丁字母,那么名字的首字母使用大写字母, 如。 2.类名最好容易识别、见名知意。当类名由几个“单词”复 合而成时,每个单词的首字母使用大写。

第四章 Java面向对象编程基础共60页

第四章 Java面向对象编程基础共60页

{ Date now=new Date();
if(now.getYear()m_StartWorkDateE.mgeptlYoeyaere()e>1==3n&e&wdCaoyms<m=o2n1E)mployee ()
return true;
else return false; }}
Programming in Java
类的修饰符 abstract 抽象类:没有自己的对象 abstract class A{..} A a1=new A(); final 最终类:没有子类的类 final class B{..} class C extends B{..}
Programming in Java
抽象类
4-15
➢ 用 abstract修饰的类(称为抽象类)没 有自身的对象,此类的对象均为其子类 的对象.
4-12
class Department {
int m_DeptNo=10; String m_DeptName; int m_DeptTotalEmp=30; Department(int dno,String dname,int total) {
m_DeptNo=dno; m_DeptName=new String(dname); m_DeptTotalEmp=total; } }
➢抽象类就是没有具体对象的概念类
➢ 不能创建抽象类的对象
➢ 抽象类里可以预留一部分方法给子 类实现
➢ 抽象类可以提高开发和维护的效率
Programming in Java
抽象类使用示例
4-16
பைடு நூலகம்
Programming in Java
抽象类使用示例

第四章 面向对象编程(二)

第四章 面向对象编程(二)


如何改进?有没有可能建立继承关系,让 子类自动继承父类的属性和方法?
public class Teacher { private String name; // 教师姓名 private String department; // 教研室 public Teacher(String myName, 属 String myDepart) { 性 name = myName; 行 department = myDepart; 为 } public void giveLesson(){ System.out.println("知识点讲解"); System.out.println("总结提问"); } public void introduction() { System.out.println("大家好!我是 “ + department + "的" + name + 现在,所有子类中相同的代 "。"); 码都抽取到父类中了 10 }
8
.NET教师

请问:以下这个解决方案中存在着什么问 题?
为什么需要继承? public class DotNetTeacher {
}
private String name; // 教师姓名 public class JavaTeacher { private String department; // 教研室 private String name; // 教师姓名 private String department; // 教研室 public DotNetTeacher(String myName, public JavaTeacher(String myName, String myDepat) { String myDepart) { name = myName; name = myName; department = myDepart; department= myDepart; } } public void giveLession(){ System.out.println("启动 Visual public void giveLession(){ System.out.println("启动 Eclipse"); Studio 2005"); System.out.println("知识点讲解"); System.out.println("知识点讲解"); System.out.println("总结提问"); System.out.println("总结提问"); } } public void introduction() { public void introduction() { System.out.println("大家好!我是" System.out.println("大家好!我是" + department + "的" + name + "."); +department+ "的" + name + "."); } } } write once, only once”的原则9 代码存在重复,违背了“

chapter4_面向对象编程

chapter4_面向对象编程

15/64
9. 重载 overloading

Java中有两种重载 – 方法重载:指在同一作用域内的若干个参数特征不同的函 数可以使用相同的函数名; – 运算符重载:是同一个运算符可以施加于不同类型的操作 类上面。而对不同类型的数据运算符的语义不同。
class Point { private int x; private int y; public Point() { } public Point(int x,int y) { this.x=x; this.y=y; } }
class Point { private int x; private int y; public Point() { } public void setX(int x) { this.x=x; } public int getX() { return this.x; } …… public String toString() { return “x=”+this.x+” y=”+this.y; } }
2/64
面向对象程序设计
3/64
本章要点

面向对象概述 面向对象中基本概念 面向对象编程 总结 作业
4/64
1、面向对象研究的问题
1.1.面向对象分析(OOA Object Oriented Analysis):面 向对象系统分析采用基于信息架构的主动需求策略,确定的 系统信息架构能够支持功能架构是包含用户需求的功能全集。 1.2.面向对象设计(OOD Object Oriented Design):面向 对象系统设计确定的,是以对象为核心的系统结构,为系统 设计提供了理论依据。 1.3.面向对象编程(OOP Object Oriented Programming): 面向对象程序设计确保了系统的正确性、复用性、和可维护 性。 1.4.面向对象测试 (OOT Object Oriented Test)

第四章面向对象程序设计基础

第四章面向对象程序设计基础

22:01:02




在研究对象时主要考虑对象的属性和行为。 类:通常将属性及行为相同或相似对象归为一 类。类可以看成是对象的抽象,代表了此类对 象所具有的共同属性和行为。 “类”是对一组具有相同特征的“对象”的抽 象描述,所有这些“对象”都是这个“类”的 实例。 在C#中,类是一种数据类型,对象是该类型 的变量,变量名即是某个具体对象的标识名。
22:01:02
什么是属性

C#不直接访问类的数据 通过访问器访问(get,set )
get和set都存在:读写属性
属性的类型和字段类 class Student 型必须一致。 { // 姓名 private string name; public string Name { get { return name; } 返回name set { name = value; } } 给name赋值 }
22:01:02
3
本章学习要点




理解类的定义 掌握声明类的方法 掌握构造函数和析构函数方法 理解并掌握访问修饰符的用法 掌握类事件的声明以及为类定义事件
22:01:02
4
4.1类与对象的概述
对象

对象是人们要进行研究的任何事物
有各自不同 的状态
状态 名字:保时捷 产地:德国 排量:3.0 颜色:灰色
第4章 面向对象基础
什么是面向对象编程


面向对象编程代表了一种全新的程序设计思路。 按照现实世界的特点来管理复杂的事物,把它们 抽象为对象,具有自己的状态和行为,通过消息 的反应来完成一定的任务。 优点:

多样性 增加代码的重用机会 增加了程序开发速度 降低了维护负担

第四章 面向对象编程

第四章 面向对象编程

4.1 类(Classes)类(class)是一种将数据和函数组织在同一个结构里的逻辑方法。

定义类的关键字为class ,其功能与C语言中的struct类似,不同之处是class可以包含函数,而不像struct只能包含数据元素。

类定义的形式是:class class_name {permission_label_1:member1;permission_label_2:member2;...} object_name;其中 class_name 是类的名称 (用户自定义的类型) ,而可选项object_name 是一个或几个对象(object)标识。

Class的声明体中包含成员members,成员可以是数据或函数定义,同时也可以包括允许范围标志 permission labels,范围标志可以是以下三个关键字中任意一个:private:, public: 或 protected:。

它们分别代表以下含义:∙private :class的private成员,只有同一个class的其他成员或该class的“friend” class 可以访问这些成员。

∙protected :class的protected成员,只有同一个class的其他成员,或该class的“friend”class,或该class的子类(derived classes) 可以访问这些成员。

∙public :class的public成员,任何可以看到这个class的地方都可以访问这些成员。

如果我们在定义一个class成员的时候没有声明其允许范围,这些成员将被默认为 private范围。

例如:class CRectangle {int x, y;public:void set_values (int,int);int area (void);} rect;上面例子定义了一个class CRectangle 和该class类型的对象变量rect 。

第4章-面向对象的程序设计方法

第4章-面向对象的程序设计方法

{
[字段成员]
[属性成员]
[方法成员]
[事件成员]
[构造函数]
[析构函数]
2021/6/7
8
}
4.2 创建自定义类
4.2.1 创建类
1. 声明类字段
字段的声明格式与普通变量的声明格式相同。在类体中,字段
声明的位置没有特殊要求,习惯上将字段声明在类体中的最前面, 以便于阅读。例如:
class Student //定义一个Student类
在一个类定义中,通常字段被声明为private或protected,这
样在类定义外将无法看到字段成员,这就是所谓“数据隐藏”。
其他成员通常被声明为public,以便通过这些成员实现对类的字
段成员的操作,类定义中的属性用于完成最基本的,对字段的读
写操2作021。/6/7
11
4.2 创建自定义类
4.2.2 类的方法与重载
是围绕着事情发展的过程进行的。
2021/6/7
2
4.1 面向对象程序设计的概念
4.1.1 面向对象与传统编程方法的不同 2.面向对象设计方法的设计思路 面向对象的程序设计方法模拟人类认识世界的思想方法,将 所有实体看作一个对象。仍然是上面的例子,面向对象的程 序设计思路如下: 1) 同样,首先需要创建一个提供用户输入用户名和密码的 应 用程序界面。 2) 将用户看作一个对象。 3) 用户对象拥有一个用于检查用户名和密码合法性的方法。 4) 用户提交数据后,调用方法对数据进行检验,并根据检验 返回结果确定用户登录是否成功。
1. 定义类的方法
在类中创建方法的语法格式为:
访问修饰符 返回值类型 方法名(传递参数列表)
{
…… ;
//方法体语句块

第四章 面向对象编程

第四章 面向对象编程

3.3 派生类对基类方法的覆盖
覆盖:在派生类用与基类相同的方法名和参 数表写一个新方法 ,是多态性的体现。 覆盖只对派生类和派生类的派生类有效,对 基类无效 。 基类的方法必需声明为 virtual(P82 ), 表示该方法(或属性)可以被覆盖。 覆盖时派生类的方法必需声明为 override 派生类的方法名和参数表必需与基类一致 派生类用关键字 base .方法名( ),可以调用 基类被覆盖的方法。
static:修饰静态成员 const 与 readonly :声明常量,前面已讲过 由于 const 隐含是 static 的,必须声明时初 始化。Fra bibliotek1.2
方法及方法的重载
C# 中方法重载的概念和写法与 Java 中 方法重载类似。
–请注意重载和覆盖的区别
函数重载的好处是使完成相似任务的方 法具有一致的外观,便于理解和复用 主要体现在参数列表上的差异
2.2
值类型与引用类型(补充)
C/C++有指针类型,而数组、结构体、类 这些数据类型本质上都是指针。因此C/C++ 数据类型可划分为基本类型和指针类型两 大类 从 C# 类的方法参数传递我们看到,引用 实际上就是指针的改头换面 C# 数据类型也可划分为值类型和引用类型 两大类, 但它和C/C++有所不同, C#所有数 据类型都是对象化的, 也就是说都是类 但类也有不同, 它们在内存中的位置和引 用方法可以是不一样的
out 引用的例子
P73 例题 4-8 class Program { public static void MyMethod(out int a, out int b) { a = 5; b = 6; } //函数中赋值 static void Main() { int x, y; MyMethod( out x, out y ); //引用时无初值 Console.WriteLine ( "调用MyMethod后,x={0},y={1}", x, y); Console.ReadLine(); } }

第四章 面向对象编程

第四章 面向对象编程

4.2 面向对象的基本概念
2. 类 类。类是某些对象的共同特征(属性和操作)的表示,对象是类的实例。 例如,飞行器类包含位置、速度、颜色等属性,以及起飞、降落、加速 等操作。 是否建立了一个丰富的类库是衡量一个面向对象程序设计语言成熟与否 的重要标志。
4.2 面向对象的基本概念
3. 继承
类之间的继承关系是现实世界中遗传关系的直接模拟,它表示类之间的内 在联系以及对属性和操作的共享,即子类可以沿用父类(被继承类)的某 些特征。当然,子类也可以具有自己独立的属性和操作。 例如,飞行器、汽车和轮船可归于交通工具类,飞行器类可以继承交通工 具类某些属性和操作。 除遗传关系外,现实世界中还普遍存在着部分—整体关系。例如,飞机 可由发动机、机身、机械控制系统、电子控制系统等构成。聚集关系和继 承性是面向对象程序设计语言的最主要的特点,是其他语言(如面向过程 语言)所没有的。
package xx.xxx.xxx; //Package 声明
class Stuinfo { public String name = null; }
4.3.2 JAVA 类的组成
[访问控制修饰符] [抽象修饰符] [最终修饰符] class 类名称 [extends 父类] [implements 接口1, 接口2] { // 成员变量的声明 [访问控制修饰符] [静态修饰符] [最终修饰符] 变量类型 变量名1 = [变量初值]; [访问控制修饰符] [静态修饰符] [最终修饰符] 变量类型 变量名2 = [变量初值]; // 构造函数的声明 [访问控制修饰符] 构造函数名1 (参数列表) { // 语句块} [访问控制修饰符] 构造函数名n (参数列表) {// 语句块} // 方法的声明 [访问控制修饰符] [静态修饰符] [最终修饰符] 返回值类型 方法名1 (参数列表) throws 列外1,例外2…… {// 语句块} [访问控制修饰符] [静态修饰符] [最终修饰符] 返回值类型 方法名n (参数列表) throws 列外1,例外2…… {// 语句块} }

第四章 面向对象程序设计

第四章  面向对象程序设计




ran.NextDouble():产生一个0.0~1.0之间的随机 实数,范围:[ 0.0, 1.0 )

例: Random r = new Random(); int x; x = r.Next( 50 ); // x 0,50
x = r.Next(-7, 10); //
x 7,10
4.5 自定义方法

用户根据需要自行定义的用于执行计算或进 行其他操作的函数成员 格式: 访问修饰符 返回值类型 方法名(参数列表) { 方法体; }

说明:



访问修饰符:默认为private 返回值类型:指方法返回数据的类型,可 以是任何有效类型,方法体中必须包含 return语句获得;也可以不返回数据,此时, 方法不含返回值类型,但必须以void引导 ()不可省略 参数列表:其中的每个参数都必须有数据 类型名称
Math.Cos(x):求x的余弦值
Math.Sin(x):求的正弦值 Math.Max(x,y):求x 、y间的最大值 Math.Min(x,y):求x 、y间的最小值 Math.Pow(x,y):求x的y次方

Math.Sqrt(x):求x的平方根( x必须为正数)
4.6.2 Random类

4.6.3 DateTime类

表示范围: 0001-1-1 0:0:0 — 9999-12-31 23:59:59
最小时间单位:100ms(毫秒)


扩展类:TimeSpan,表示一个时间间隔

常用方法与属性
DateTime.Now.ToLongDateString() DateTime.Now.ToLongTimeString() DateTime.Now. Year DateTime.Now. Month DateTime.Now. Day DateTime.Now. Hour DateTime.Now. Minute DateTime.Now. Second DateTime.Now. DayOfWeek DateTime.Now. DayOfYear
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.2
值类型与引用类型
C/C++有指针类型,而数组、结构体、类 这些数据类型本质上都是指针。因此C/C++ 数据类型可划分为基本类型和指针类型两 大类 从 C# 类的方法参数传递我们看到,引用 实际上就是指针的改头换面 。 C# 数据类型也可划分为值类型和引用类型 两大类, 但它和C/C++有所不同, C#所有数 据类型都是对象化的, 也就是说都是类 但类也有不同, 它们在内存中的位置和引 用方法可以是不一样的
out 引用的例子
P73 例题 4-8 class Program { public static void MyMethod(out int a, out int b) { a = 5; b = 6; } //函数中赋值 static void Main() { int x, y; MyMethod( out x, out y ); //引用时无初值 Console.WriteLine ( "调用MyMethod后,x={0},y={1}", x, y); Console.ReadLine(); } }
3.3 派生类对基类方法的覆盖
覆盖:在派生类用与基类相同的方法名和参 数表写一个新方法 ,是多态性的体现。 覆盖只对派生类和派生类的派生类有效,对 基类无效 。 基类的方法必需声明为 virtual(P82 ), 表示该方法(或属性)可以被覆盖。 覆盖时派生类的方法必需声明为 override 派生类的方法名和参数表必需与基类一致 派生类用关键字 base .方法名( ),可以调用 基类被覆盖的方法。
关于构造函数(构造方法)
基本上和 Java 一样,一般声明为 public 如果没有自己声明的构造方法,系统会自动 提供一个默认构造方法对类进行初始化。 构造方法与类同名,没有返回值。 支持重载,可以声明多个构造方法。 本书中将类的属性(或成员变量)称为“字 段”,我们课中一般称为“成员变量”或 “属性”。 成员变量的默认初始化:数值类型为 0; bool 类型为 false;引用类型为 null。
三、类的继承
建立一个新类时,可以让新类继承其它类的 方法和属性。C# 中用 “:”表示继承 例如:class MyClass :BaseClass 被继承的类叫基类,新类叫派生类(本书常 称为扩充类) 派生类自动获得基类的方法和属性,还可以 自已添加新的方法和属性。 可以在保持方法名字和接口(参数)不变的 前提下,覆盖基类的方法 。
解决办法
可根据需要,常用两种方法: 为基类 A 添加默认的构造方法,如: public A() { this.age = 5; } 或者在声明 B 的实例时,向 A 的构造方法 传值用来初始化 A 的成员。 此时可以将 B 的构造方法 public B(int age) 改写为: public B(int age) :base(age) {… 注意,这里的“:”不是继承,而是表示 将参数 age 传递给 A 的构造方法。 例题: P88 例 5-5
static:修饰静态成员 const 与 readonly :声明常量,前面已讲过 由于 const 隐含是 static 的,必须声明时初 始化。
1.2
方法及方法的重载
C# 中方法重载的概念和写法与 Java 中 方法重载类似。
–请注意重载和覆盖的区别
函数重载的好处是使完成相似任务的方 法具有一致的外观,便于理解和复用 主要体现在参数列表上的差异
静态成员与实例成员
和 Java 类似,类的成员(属性、方 法等)同样分为静态(类)成员与 实例成员。 通过 static 关键字声明静态成员。 静态成员通过类名直接调用。
访问修饰符
C# 对成员的访问修饰符比 Java 多一些。 除了常见的 public、private 类成员修饰符, C# 还有static、const、readonly、protected, internal 、sealed 等类成员修饰符。 以下三个是最常用的: Public:所有类都可访问。 private(默认):只能本类访问,外部无法存 取。 protected:本类或其派生类可访问
第四章
面向对象编程 (4、5章)
一、类的构建及使用 二、类的方法参数的传递
三、类的继承
四、其它
一、 类的构建及使用
1.1 类的构建
我们已经简单介绍过类的基本结构 P66 例4-1 该项目中包含2个类,注意前一个类没有 main 方法。 如何在一个项目中添加多个类? 建立新项目后,可以新建类,也可将现有 的类直接 添加进来。 注意:如果添加一个现有的类,代码中可 能出现找不到某个类的问题,需要对引用 的类添加引用。
是容易混淆的两个概念 方法的覆盖和重载有关系么? 没有任何关系! 重载,即用同一个方法名,不同的参数, 写 N 个方法 覆盖, 相同方法名和参数重写一个方法 重载是在一个类里进行的,和继承无关 覆盖是在基类和派生类之间进行的,与 继承有关。
在派生类中,可以使用 new 关键字来隐藏基 类中的同名方法。 其本质也是覆盖,与 override 有何区别? 基类中只有声明为 virtual 的方法才允许用 override 进行覆盖。 如果基类中的方法没有用 virtual 进行声明, 需要在派生类中重写该方法时,可以用 new 隐藏基类方法。 可以使用关键字 base 来调用被隐藏的方法。 new 关键字提供了更加灵活的方式。可参见 P84 例题 5-3
params 关键字
当为方法传递的参数个数不确定时,可以使 用 params 关键字来声明参数。 在方法声明中的 params 关键字之后不允许 任何其他参数,并且在方法声明中只允许一 个 params 关键字。 例如: public void UseParams(params int[ ] list) { ...... } 你可以简单地理解为用一个不定长数组做参 数,调用方法时多个参数用“,”分隔。
虚拟(virtual)方法应注意的问题
基类中声明为 virtual 的方法,并不强制在 派生类中一定要进行覆盖( override )。 虚拟方法不能是 static 的,也不能是 private 的。为什么?
覆盖时,方法的名称、参数个数、类型、 返回值等都必须和虚拟方法一致。
方法的覆盖与重载的关系
3.1
继承 中注意的几个问题
派生类不能访问基类的 private 成员 间接继承:2 级或以上的继承关系 Object 类是所有类的直接或间接基类 派生类对象也是基类对象 不支持类的多重继承 可以通过接口(interface)间接实现多重 继承。
3.2 基类和派生类的构造函数
构造函数不能被继承(但可通过关键字 base 进行调用),原因在于基类的某些 成员可能无法访问。
3.6 抽象类与封闭类
抽象类:使用 abstract 关键字声明的类。
和 Java 没声明区别,同样只能被继承,不 能实例化,子类必须实现基类的抽象方法。 封闭类:不能被其他类继承的类,使用 sealed 关键字进行声明的类。
3.4 隐藏(new)
3.5 版本控制问题
所谓版本控制,是指当对基类方法进行了 覆盖或隐藏后,在调用方法时,系统如何 识别应该使用哪个方法。 调用非虚拟方法时不会受到版本的影响。 因为 new 隐藏的基类方法,要调用基类方 法,需要使用 base 才能调用。(编译时) 调用虚拟(virtual) 方法的实现部分可能会 因扩充类的重写而影响执行结果。系统将 在运行时自动判断使用哪个方法。 请大家自己仔细研究下 P89 例题 5-6
按值类型和引用类型划分
值类型的数据类型:基本数据类型、枚举 引用类型的数据类型:数组、类 混合类型的数据类型:结构 值类型对象存放在内存的栈中,而引用类 型对象放在内存的堆中,栈的效率高于堆 对象实例化的语法有所不同,实例化值类 型对象不需要 new 操作符,实例化引用类 型对象则需要 new 操作符
其中定义了私有(private)属性 gread
由于是私有的,对其它类是不可见的
随后定义了公用属性过程 Gread (注意大 小写的差别),它们规定了对属性值的处 理方式。 属性过程也是类的属性 。 通过属性过程,提供了对上述私有属性的 访问方法。
问题
为什么这样处理?

一共有多少属性?
答案: 2个,1 个私有属性,1 个公用属性过程 属性过程的 get 与 set 两个“子过程”, 是否必须成对出现? 是不是要为每一个属性都写个属性过程?
其它类成员修饰符
Internal :当前项目中都可以访问。
– 该访问权限一般用于基于组件的开发,可以使 组件以私有方式工作,而该项目外的其它代码 无法访问。
Protected internal :当前项目或项目中类 的子类。 Partial:局部类型,类的定义和实现可分 布在不同文件中。很少使用,目前不必了 解。 sealed:用它修饰的类或方法不能被继承
属性过程的使用
其使用与普通属性一样 ,可以通过对象名 来调用 例如:对象名. Gread = 60 ; //写属性值,如果超出范围, 属性过程自动 置 0 mygread = 对象名. Gread ; //读属性值 简单声明方式(自动实现属性) public int Age { get ; private set ; } //注意,此处 Age 是一个只读属性。
二、类的方法参数的传递 --- 值类型与引用类型
2.1 类的方法参数传递
方法的形参有传值调用和引用调用。前者 传一个变量副本,变量副本的值改变不影 响原变量;后者传一个变量地址,会改变 原变量的值。 与C++不同,这里变量地址不叫指针,而 叫引用,引用有 ref 和 out 两个关键字。
ref 引用与 out 引用
1.4 this 引用
指代当前对象,使用与 Java 类似 实际上我们调用任何对象的方法或属性, 都指“当前对象”,也就是说都有一个隐 含的 this,只是通常不必在代码中强调而 已 只有当需明确指出:我要引用当前对象时, 才使用 this
相关文档
最新文档