集合,多态,继承单根性
1什么是方法,方法用来干什么的。方法就是重用的一种机制,减少代码的重复使用
方法的定义:
访问修饰符 返回值类型 方法名(参数)
{
方法体
return
}
访问修饰符
面向对象是什么意思呢?
凡事亲力亲为,每一个过程都必须非常清楚
2类与对象,以及其成员有那些
事例什么叫事例 就是实实在在的才叫事例。事例和类的区别是什么的,看看他存不存在
类的定义
访问修饰符 class 类名
{
字段
属性
方法
构造方法
方法名必须与类名相同
方法的返回值,没有返回值 构造方法没有返回值
参数 默认无参如果自己添加了又参构造方法,无参的构造方法就没了
构造方法也可以重载
}
继承
没有提供父类的构造方法 父类会执行吗??? 只要你有继承的关系 就一定会从父类开始执行,执行完父类的构造方法以后在开始执行子类的构造方法,父类有个默认的无参方法 如何调用父类的构造方法? 为每一个字段进行初始化即可
在子类构造方法中,用base的形式显示调用父类指定重载的构造方法
语法: public 子类名(参数):base(父类参数)
{
对子类对象成员的初始化
}
等价格式 class base
{
public base()
}
class subClass :base
{
public subClass():base
}
在使用构造方法的时候 要在父类手动添加一个无参的构造方法,要是下面还有继承的话 也要手动添加一个无参的构造方法 我要想知道的问题
当你执行子类的时候先要从子类运行 然后在跑到父类,然后再从父类到子类
继承性与结构方法
语法
class 类名 :父类命
{
子类成员
}
只能访问非私有的
字段,属性。
字段就是类中的变量
属性
提供两个方法 简化了用一个名字加大括号和get set
public 返回类型 属性名
{
get{}
set{}
这就是一个简化的东西
}
构造方法
创造对象的时候,调用构造方法就是new 会先默认调用父类的调用方法 当父类完成创建
后就在调用子类
调用那一个
如何传参
丢失默认构造方法
继承的单根性
2任何类型的执行都会向上首先调用父类的构造方法,直到object类型
所有类型都会直接的或简介的继偶承obhect类型
继承的传递性
继承的单根性任何一个类只能有一个父类,(可以实现多个借口)
protected
受保护的成员
只允许在子类中和自己当中访问
注意 object 中的membrwiseclone方法在Main方法中不能访问,因为Main是静态的
子类不允许有执行代码的代码过程,代码的执行应该放在方法中
里氏转换
子类对象可以直接诶赋值给父类对象
父类对象里面如果是子类对象,可以强转为子类对象
类型决定了可以访问什么类型
里氏转换的第一个特点是 统一管理对象了,但是此时 如果想要使用对象的子类的方法或者成员
子类已经转换成父类,所以无法访问子类的成员
如果,父类对象中存在的就是子类的对象,那么可以使用强制转换将“父类”强制转换成子类对象来使用
例子:
student sa=new student("xiao","lan");
preson p=sa;
student su2=sa;
student stu3
stu3=(student)p;
非常混桥的:1是不是所有的的父类都能转换成子类
答案:不是所有的父类都能转换成子类
2: Teacher类型转换成Preson后,能不能在强转成Student
is的用法。(就是类型判断)
语法: 对象或者是事例is类型名
这个表达式可以返回一个bool值,表示是否可以转化
判断父类能否转化为子类的时候尝尝使用
as的用法
类型名 变量名 =莫个对象或实例 as 类型名
注意 :前后的类型名相同
伪代码:
类型名 变量名;
if(某个对象活实例 IS 类型名)
{
变量名=(类型名)莫个对象或实例;
}
else
{
变量名=null
}
多态
父类方法与子类方法重名,有2中结果
第一 叫重写
第二 父类与子类有相同的方法
以父类身份出现的时候,那么使用父类的方法
以子类身份出现的时候,就是使用子类的方法
隐藏基类方法
new则隐藏,over重写
隐藏看类型,重写总用新
对象在不同的类型状态下表现出来的不同特征
将父类方法前面加上一个virtual 加上virtual 就是虚方法,替补的意思
将子类方法名改为匪类方法名相同,并且前面加上一个override
当你的方法名字也你父类的名字相同时候,如果你的方法中有一个override 替换重新的意思
重写后的方法,总是使用新的
集合
Arraylist 是类型
首先要引用system.collection命名空间
1手动添加(必须记住命名空间)
光标停在代码中,快捷键或鼠标右键 添加(必须记住类名)
学习集合可以注意归纳一下可用的方法
添加数据:Add()。或者是AddRange()
使用add可以添加数据,并且与数组一样可以使用“下标”(索引)访问数据
使用下标访问的数据是object类型的,必要时需要转换,必须满足历史转化原则()
为什么要把Add参数设为object呢? 目的就是让他存放所有的数据 ,为了通用
AddRenge将数组或集合当中的数据批量的一个一个的加进来
数组和集合中有多少个数据,新集合中就添加了多少个数据,类型等一一对应
如果是使用Add方法同样可以讲数组或集合作为数据加入,但此时加入数据族活集合作为一个添加过去 只有找到该项,才能通过“下标”(索引)才能找到
插入数据Insert()
使用语法:
集合名.Insert(位子,值)
注意:1位子的确定,使用插入好的数据来数
2 第二个数据就是要出啊如的数据的内容
删除数据: Delete()或者Remove()
判断是否包含:contains()
sort等可以处理排序功能,甚至还有max min AVG等
获得长度 使用count属性
集合中
Add方法返回一个int
将数据添加到后面
AddRenge返回void
是成批量的 不会返回任何内容