C#面向对象(抽象类、接口、构造函数、重载、静态方法和静态成员)
1、抽象类
抽象类关键词 abstract (抽象) override (重写)
在父集中用 abstract 表示抽象类,抽象方法,在子集中用 override 改写
抽象类就是出来当亲爹的,只为继承而出现,不能被实例化成对象,一般抽象类中只放置抽象方法,只规定了返回类型和参数,不定义具体的内容
抽象类可以包含抽象方法和普通方法,抽象方法一定在抽象类中,抽象类中不一定只有抽象方法 , 如果要调用抽象类中的普通方法,那么需要子类继承之后实
化再调用,当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法。
sealed 和 abstract 关键字不能同时出现
namespace ConsoleApplication1
{
public abstract class Ren
{
public abstract string ChiFan();
}
}
//=========================================
namespace ConsoleApplication1
{
public class Woman : Ren
{
public override string ChiFan() //子类,父类 方法名称要一样,父类中抽象方法子类中必须要重写
{
return "细嚼慢咽";
}
}
}
//======================================
namespace ConsoleApplication1
{
public class Man : Ren
{
public override string ChiFan()
{
return "大口吃饭";
}
}
}
2、接口
关键词 interface
可以将程序拆分成多个模块,定义子类必须实现的功能
它就是出来当干爹的,不能被实例化成对象,接口里面不能有实际的方法
类:一定用 public 修饰符, 用 interface 代替类个关键字 class
方法:不能包含普通方法,不用 public, 直接【 数据类型 函数名 (); 】
子类:不需要override关键字,
:父集中的方法都有重写
案例
namespace ConsoleApplication1
{
public interface YuLe
{
string AiHao();
}
}
———————————————— namespace ConsoleApplication1
{
public interface GongZuo
{
string JiNeng();
}
}
———————————————— namespace ConsoleApplication1
{
public class Man : Ren, GongZuo, YuLe
{
public override string ChiFan()
{
return "大口吃饭";
} public string JiNeng()
{
return "敲代码";
} public string AiHao()
{
return "打游戏";
} }
}
—— 子类、父类 方法名一致
—— 父类中的方法子类中都要重写
3、构造函数
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象(为对象成员变量赋初始值),
每一个类都有构造函数,类实例化的过程就是执行构造函数的过程,一个类可以有多个构造函数 ,
构造函数一定不能是静态的
public class Test1
{
public Test1() // 什么都没有的一般默认隐藏, public 方法名 (没有数据类型)
{ // 方法名与类名一致,text1() 括号中可以有参数 }
} text1 t = new text1( ); //new text1( ); 实例化过程
4、重载:
关键词 overload
构造函数的方法名一样,参数个数不同,或参数类型不同
public class text2
{
public text2 ( string a , string b )
{
return a + b ;
}
public text2 ( int a , int b )
{
return a + b ;
}
}
5、静态方法和静态成员
关键词 static
静态方法是属于类的,不属于类下面的对象。
直接用: 类名 . 静态方法
public class text3
{
public static string haha ( )
{
return "哈哈哈";
}
} text3.haha ( ); //调用,直接通过类名点出
非静态方法
需要实例化对象
成员都是属于对象的,用对象调用
静态方法
不需要实例化对象
静态成员是属于类的,用类名调用
注: 静态方法里面不能包含普通成员
普通方法里面可以包含静态成员
用处:
为了简便,连接数据库的时候,造连接对象类,使用静态属性直接返回连接对象。
两个类之间传递信息
不允许创建对象的类(对创建对象的个数有限制)
C#面向对象(抽象类、接口、构造函数、重载、静态方法和静态成员)的更多相关文章
- 【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装
抽象类,接口类 Python没有接口这个概念 抽象类(接口类): 目的是制定一个规范 要学会归一化设计,有重复的东西就要想把它们合并起来 from abc import ABCMeta, abstra ...
- python面向对象 : 抽象类(接口类),多态,封装(私有制封装)
一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...
- php面向对象 封装继承多态 接口、重载、抽象类、最终类总结
1.面向对象 封装继承多态 接口.重载.抽象类.最终类 面向对象 封装继承多态 首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...
- Java学习笔记(六):面向对象、接口和抽象类
类和对象 Java是一门面向对象的语言,下面我们来了解一下Java中的面向对象. 方法和重载 Java中的方法格式如下: 访问修饰符 返回值类型 方法名(参数){ 方法主体 } Java的方法支持重载 ...
- 【Java基础】【09面向对象_多态&抽象类&接口】
09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案 ...
- [Java学习]面向对象-抽象类;接口
抽象类 语法 public abstract class A{ } 定义 抽象类无法实例化.但抽象类有构造方法,在子类创建对象时用. 抽象类中可以定义抽象方法public abstract void ...
- 面向对象 继承 抽象类 接口 static 权限修饰符
Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...
- java面向对象--抽象类和接口
如果某个父类只知道其子类应该包含哪些方法,但无法知道如何实现这些方法,同时要使用多态的特性,怎么办? 抽象方法:关键字abstract允许在一个类中创建一个或多个没有方法体的方法--只提供方法签名,但 ...
- Python面向对象之接口类(抽象类)
Python面向对象之接口类(抽象类):就是制定一个规范. 比如定义了一个接口类(抽象类)(他们是不可以进行实例化的,这就是他为什么是制定一个规范的原因). 他的定义是需要abc模块,要变的就是他的方 ...
随机推荐
- 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_05-vuejs研究-vuejs基础-v-text指令
把js移到body 的下面 网速改慢一点 通过模拟网速慢的情况.刷新页面的时候会有闪烁的效果 速度快的情况下也会闪烁 ,只不过是不明显. 2.解决插值表达式闪烁问题,使用v-text v-text可以 ...
- delphi type
声明: 1. type Name = Existing type; 2. type Name = type Existing type; 3. type Name = (EnumValue1 [=va ...
- 使用super函数----增量重写普通方法和构造方法
使用super函数----增量重写普通方法和构造方法 在子类中如果重写了超类的方法,通常需要在子类方法中调用超类的同名方法,也就是说,重写超类的方法,实际上应该是一种增量的重写方式,子类方法会在超类的 ...
- 【leetcode_easy】543. Diameter of Binary Tree
problem 543. Diameter of Binary Tree 题意: 转换一种角度来看,是不是其实就是根结点1的左右两个子树的深度之和呢.那么我们只要对每一个结点求出其左右子树深度之和,这 ...
- 阅读随笔 Spring、Mybatis
一.<Spring+Mybatis 企业应用实战>(第2版本) 本书讲解了Spring.Mybatis及Spring+MyBatis 工作中的常用方法,没有太深入的原理性讲解,介绍 “如何 ...
- 【Qt开发】Qt5 中对 C++11 一些新特性的封装
C++11 是现在的 C++ 标准的名称,C++11 为 C++ 语言带来很多新特性. 而 Qt 4.8 是 Qt 首个在其 API 中开始使用一些新的 C++11 特性的版本,我之前写过一篇博文:C ...
- 最新 前程无忧java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.前程无忧等10家互联网公司的校招Offer,因为某些自身原因最终选择了前程无忧.6.7月主要是做系统复习.项目复盘.Leet ...
- Vue的作用域插槽
一.通常情况下都是父组件传递数据给子组件进行展示的(无法改变子组件的展示方式):而作用域插槽允许子组件通过slot向父组件传递数据,类似React中的“以函数为子组件”,由父组件决定渲染的内容(包含绑 ...
- 如何下载spring sts
1.打开https://spring.io/ 2.翻到页面最底部点击tools 3.页面下滑点击Download STS4 Windows 64-bit
- redis同步到磁盘