现在的位置: 首页 > 综合 > 正文

黑马程序员_学习日记35_529基础加强(封装、继承、多态)

2013年12月13日 ⁄ 综合 ⁄ 共 1901字 ⁄ 字号 评论关闭

封装、继承、多态

复习:

类、对象

变量作用域:局部变量、类的成员变量。访问类的变量可以在前面明确用this来表示。

 

封装

1、 属性封装字段。把变化的封装起来,保留用户统一的访问

2、 方法的多个参数封装成一个对象。通过类的属性来实现。当方法只有一个参数,而又想添加多个参数时,此方法很好。

对象初始化器

ToString方法默认返回namespace.classname,可以override ToString()

3、将一堆代码封装到了一个方法中

4、将一些功能封装到了几个类中

5、将一些具有相同功能的代码封装到了一个程序集中(dllexe),并且对外提供统一的访问接口

 

继承

Base Class→基类、Derived Class→派生类

Parent Class→父类、Child Class→子类

继承的好处?1、代码重用

继承的特性:1、单根性。只有一个父类2、传递性。可以调用父类的父类的属性和方法

object类的4public方法:ToString()GetType()GetHashCode()Equals()

不能循环继承

关于继承中的构造函数:

1、 构造函数不能被继承,所以只能调用

2、 子类的构造函数默认会调用父类无参的构造函数

关于父类中私有成员是否被继承?Tiger的观点,不能。原因:(有待进一步讨论)

虽然父类中私有成员也被分配内存(子类中也有),但继承只是面向对象中的一个概念,目的是为了子类使用(多态,代码重用),私有成员即便继承了,子类也不能访问。能访问才叫继承,不能访问不叫继承。

思考:构造函数调用、委托和方法重写的联系、区别?

构造函数调用相当于方法重写的特例

 

base的作用:在子类构造函数后base调用父类有参构造函数

this的作用:在当前类的构造函数后面通过:this来调用当前类自己的构造函数

一般情况下,如果子类继承了父类的成员,那么this.成员和base.成员地址相同,除非子类重写父类成员。(调试时调用即时窗口可以查看成员的地址)

 

对象初始化器

Person p = new Person(){Name = “yzk”, Age =18, Email = “yzk@rupeng.com”};

集合初始化器

List<int> list = new List<int>(){10,20, 30, 40 };

       相当于:

List<int> list = new List<int>();

list.Add(10);

list.Add(20);

 

访问修饰符5种:

private

protected 可以在当前类和其子类的内部访问

internal 可以在当前程序集内部访问

       protectedinternal的范围没有可比性,即类的继承关系可以跨程序集

protected internal
protectedinternal的并集

public

访问级别约束问题:

1、子类继承父类时,子类的访问级别不能比父类低。安全考虑(我理解访问级别越高可访问范围越小)

2、类的访问修饰符只能是publicinternal

3、要求方法参数的访问级别与方法本身的访问级别一致

 

多态:多种表现形态

用虚方法实现多态

判断当前的cns[i]中存储的对象是否是Chinese类型 if(cns[i] is Chinese)

开放封闭原则:对扩展开放,对修改关闭

Ctrl+K+D自动格式化文档

1、 将父类中的方法标记为“虚方法”,virtual

2、 子类方法前加override重写父类方法

 

调用静态方法必须通过类名直接调用,不能通过对象调用。

静态成员在整个应用程序退出时,才释放资源,所以可以在整个程序中共享数据。为节省系统资源,尽量避免写静态字段或静态属性,最好只写静态方法。

静态类不能被实例化,不能被继承。

当给一个普通类添加静态字段后,系统会默认为给类生成一个静态构造函数(静态构造函数不能有访问修饰符,不能有参数)。静态类的构造函数只会在第一次使用静态类时加载

静态类继承自object

static=sealed(封闭,不能继承)+abstract(抽象,不能实例化)

静态、多态是一对相反的概念

1、 什么情况下将一个类标记为静态类?

当一个类是工具类,里面都是方法,为了让用户调用方便,不需要实例化对象。静态类中的所有成员必须都是静态的。比如:ConvertMathFileConsole……

2、 什么情况下需要在一个普通类中编写一个静态成员,而这个类不标记为Static

当这个类需要被实例化的时候,如果这个类中有一个成员是所有对象都共享的数据,这时可以将这个成员标记为静态,但这个类还是一个实例类。

 

sealed 密封类。方法密封则不能被重写

 

抱歉!评论已关闭.