五.继承

5.1 父类又称(基类,超类)是被继承的类,子类又称派生类。

5.2 A:B,A就叫子类,B叫父类,B里面所有的成员(字段,方法)都会被A继承。 B里面的私有成员,A也是继承下来了的,只是没有访问权限。

5.3 A:B  B:C ===》A:C

5.4 任何类型的基类是Object类

5.5 使用sealed关键字,其他类无法继承此类,代表密封类 :sealed class Person{}

5.6 A:B B里面有SayHi方法,用A的对象调用SayHi的时候,首先调用的是B里面的构造方法,然后是A的构造方法,最后才是SayHi,如果B上面还有继承的类,则先调用该类的构造方法

5.7 A:B,A和B里面都有一个方法SayHi,默认情况下,运用A的对象调用SayHi的时候,调用的是子类的SayHi,父类的被隐藏了。

注:new:1.实例化对象2.隐藏一个类的方法

5.8 重写/覆写

A:B,A和B都有一个方法SayHi,当B里面的SayHi方法是一个虚方法(virtual)的时候,A里面的SayHi才能被覆写/重写,通过关键字override重写

ru: public virtual/override void SayHi(){}

构造函数不能被复写

5.9里氏替换原则:子类对象可以赋值给父类变量,反之不成立

Person p=new Chinese();√

A:B,A和B里面都有一个方法SayHi,当 B b=new A(), b.SayHi()默认情况下(没有被覆写)的时候,就近原则调用的是父类。

如果sayhi被覆写,调用的是子类。

六.多态

6.1  多态分为重载(overload)和覆写(override)

重载:方法名相同,方法里面的参数个数或者类型不同。

6.2 只有父类的虚方法(virtual)才能被子类覆写,子类实现覆写用关键字override,如果不加override就隐藏了父类的方法(需要加上关键字new,eg: public  new static void aa())

6.3 静态方法不能被覆写,但可以被隐藏

6.4 静态类里面只能有静态成员

6.5 静态的成员不能带override ,virtual ,abstract

七.接口,抽象类,泛型

7.1 抽象类、抽象方法

1. abstract +类名,abstract+方法名

2. 抽象类不能被实例化

3. 抽象方法的作用是为子类提供一个统一的接口,抽象方面里面只有声明,没有实现

4. 一个类一旦继承了一个抽象类,就必须实现对该抽象类里面所有的抽象方法的实现

5. 一个抽象类里面可以有非抽象方法,但是一旦一个类里面有抽象方法,该类就为抽象类了

6.  抽象方法在声明后用一个;结束,不需要用{}

7.抽象方法在覆写的时候不需要声明为虚方法

public abstract class Program
{
public abstract void A(); public abstract void B();
}
public class C : Program
{
public override void A()
{
Console.WriteLine("China");
} public override void B()
{
Console.WriteLine("nihao");
} public static void Main()
{
C me = new C();
me.A();
}
}

7.2接口

1.  Interface +类名

2.  接口用来实现多继承,一个类只能有一个父类,但可以继承于多个接口class A :B,C   //类是单继承,接口是多继承

3.  接口是一种特殊的抽象类,它里面规定得更严格,里面的方法只能为抽象方法

4.  定义一个接口的时候,一般为缺省,即interface +类名,前面自动加上了public abstract,定义接口中的方法时,也只需要写返回类型 +方法名即可,因为也默认为                        public abstract

5. 接口里面的所有成员都是公共的,抽象类里面的成员可以是私有的,公共的,受保护的

6. 一个类继承与一个接口,就必须完成该接口中所有方法的实现

interface Interface1     ///新建接口
{ void A();
void B(); }
class Class3:Interface1
{
public void A() {
} public void B(){
} }

最新文章

  1. JavaScript 动态脚本
  2. 【Mocha.js 101】钩子函数
  3. Linux(CentOS) 如何查看当前占用CPU或内存最多的K个进程
  4. Word Ladder
  5. C++时间戳转化(涉及GMT CST时区转化)
  6. A. Fox and Box Accumulation
  7. gcc中不同namespace中同名class冲突时
  8. [模拟]ZOJ3485 Identification Number
  9. 元素“Button”不是已知元素。原因可能是网站中存在编译错误,或者缺少web.config文件
  10. 同时显示多个 Notification
  11. Python基础知识学习_Day2
  12. HDU5058
  13. 原生JS实现图片轮播
  14. 【重学计算机】机组D4章:存储系统
  15. @ResponseBody注解和@RequestBody注解
  16. Jenkins部署码云SpringBoot项目到远程服务器
  17. python retrying retry
  18. linux 查找java程序、杀死、重启
  19. (网页)Uncaught ReferenceError: pageImport is not defined
  20. sqlldr 学习总结1

热门文章

  1. Oarcle之group by关键字与having关键字
  2. [转载]URI 源码分析
  3. Task: Indoor Positioning with WiFi Signals
  4. 基于OpenCV做“三维重建”(0)-- OpenCV3.2+VIZ6.3.0在vs2012下的编译和使用
  5. FL Studio中的音频设置
  6. TreeMap,HashMap,LinkedHashMap区别,很简单解释
  7. hello2代码的简单分析
  8. POJ 3311 Hie with the Pie 【状压DP】
  9. ios中关键词weak,assign,copy.strong等的区别
  10. QTL定位相关