C#2.6多态/重载与重写/抽象类/接口/方法类型/
2.6多态
1.方式:1>virtual和override构成重写 2>抽象类和抽象方法3>接口
2.面试:重载和重写区别
1>重载和重写方法名都保持一致
2>重载是在同一个类中 重写是在父子类
3>重载的参数列表不一致 重写的方法的参数列表完全一致
3.重载的表现方式不一致表现在那几个方面
4.面试,方法参数类型的不同特点:1>参数数量2> 参数类型3> 参数顺序
5.抽象类:
1>用abstract修饰的类叫做抽象类
2>抽象类是不可以被实例化的
3>抽象类是可以被继承的 但是继承了抽象的子类必须实现抽象类中的所有的抽象方法
4>抽象类中可以有实例方法
6.抽象方法:
1>用abstract修饰的方法叫做抽象方法
2>抽象方法只包含在抽象类中
3>抽象方法的访问修饰符不能是private 可以使protect
7.接口:
1>接口是处理多态的重要手段
2>接口不可实例化
3>(很多对象书序不同的类的时候,但是有共同的功能 我们考虑使用接口)
8.抽象类和接口的区别
1>c#只能继承一个类 但是可以继承多个接口
2>抽象类使用的是 abstract修饰的 接口是用的而是interface修饰的
3>抽象类是不完全抽象(抽象类中可以包含抽象方法,也可以包含实例方法)接口是完全抽像(接口内博全是抽象方法)
4>抽象类中的抽象方法市访问修饰符的 接口中的方法没有访问修饰符
5>抽象类和借口是不能实例化的 必须通过继承来实现
6>抽象类b可以继承一个抽象类a 抽象类b不必要实现抽象类a中的抽象方法
9.接口和类的对比
1>c#只能继承一个类 但是可以继承多个接口
2>c#是一种单继承语言 单继承指的是集成一个类c#也可以继承多个接口实现多继承
3>接口的修饰符石interface 类的修饰符是class
4>接口中的方法没有方法体 不需要访问修饰符非抽象类中的方法必须有方法体抽象类中的抽象方法没有方法体
10.方法的类型:
1.构造方法:方法名和类名保持一致 没有放回值类型 没有房回执再对象被实例化的时候调用如果泪中没有构造方法那么系统会自动生成一个无参构造一旦写了构造方法 系统将不在自动生成无参构造
2>实例方法:(成员方法: 通过实例)方法名(参数列表);实例方法可以调用静态方法也可以调用实例方法
3>静态方法:类名 方法名(参数列表);静态方法只能调用静态方法
4>抽象类中的抽象方法: 有访问修饰符没有方法体
5>接口中的抽象方法: 没有访问修饰符没有方法体
11.Return跳出方法 break 跳出循环 continue继续执行后跳出循环
12.例题:(抽象类)
(1. 父类删除无参,子类testlittleson出现红线,建立this
(2. 父类用virtual,子类用override
(3. 输出new test[2] 2为索引,ts[i].Add() ‘add为子类的override,记得写括号’
13.例题(打卡问题父类用virtual,子类用override)
14.例题(多态问题)
1.父类用virtual,子类用override
2.父类删除无参,子类testlittleson出现红线,建立this,base
15.例题(接口练习)*创建接口 ,I开头
(父类)
(子类功能)
(main 输出)
16.例题(求图形面积)用抽象类和抽象方法
(父类:)
1.GetArea 接收子类的面积©
2.override Tostring 只针对输出不针对抽象类
(子类:)
1. radius输入圆的半径
2. getArea 输出圆的面积(float 强制转化;Math.PI==π)
(输出)
总
结
1. char[]Arr=Str.To CharArray; 把字符串转成字符数组
2. int[]numArr=newint[A+B];创建新数组长度为两数组之和
3. override 优先于(重写)<=>virtual虚拟的
4. abstract抽象的//protected保护//GetArea获取前面方法/数组//radius半径
5. 【GetHashCode】抽象类 ///【ToString()】重写字符串
6. Override+”空格”{1.bool 2.int 3.string}
7. Return跳出方法 break 跳出循环 continue继续执行后跳出循环
8. 栈与堆的区别:值类只用于栈;引用类即用于栈又用与堆