class中的东西和继承、多态的概念
class中的private、public、protected
最近看了一些视频顺便总结一下class中的这几个类型以及继承
public:
在C++和C#中类的用法,语法是差不多的。当变量,函数之类的对象放在public中时,说明这些变量和函数是可以被外界访问的,自己本身可以使用,也可以在其他函数中调用。
private:
顾名思义,就是私有的,只有自己本身可以调用,其他外来的函数,是不能访问到的,是属于class中内部的。
protected:
在这个区域的东西,能够访问的就是自己本身-父类,还有衍生出来的子类。
在C++代码例子如下:
#include<iostream>
using namespace std;
class A{//定义一个父类
public:
A():i(0){
cout << "A::A()" << endl;
}
~A(){
cout << "~A::A()" << endl;
}//以上是构造函数和析构函数
/*构造函数我认为主要是用于对一些数值进行初始化,当然没有这个函数存在也可以,
然后析构函数我认为就是用来回收内存的,就是当它整个类的使用过后,回收其使用的内存*/
protected://表示只有它自己和子类可以访问
void set(int ii) {
i=ii;
cout << i << endl;
}
private://只有自己才能够访问的,可以防止外部对其内部数据的修改。
int i;// i是私有的,只有父类可以调用;
};
class B : public A{//B为A的子类-也是和继承有关
public :
void f(){
set(20);//可以使用
// i=30;
}
};
/*在调用B类时,B类继承了A所有的部分,当然不包括private部分
B可以在A的基础上添加一些自己所需要的性质,因此在调用B时,可以调用A的函数*/
int main()
{
B b;//定义一个B类型
int n;
cin >> n;
//b.set(n);//此时在main()函数中不能调用 因为set()函数只能在B中使用,
b.f();//B类函数的调用
return 0;
}
C#代码例子:
class A
{
public int c;//所有都可访问
public void print() { Console.WriteLine("class A :: print()"); }//定义函数
public A()
{
this.d = 10;//初始化定义
Console.WriteLine("A的构造函数");
}
~A()
{
Console.WriteLine("析构函数");
}
protected void f()//只有A和B可以访问
{
print();
Console.WriteLine(d + e);
}
private int d, e=20;//只有A可以访问
}
class B : A//B继承A,B是A的子类
{
public void sum(int x, int y)
{
Console.WriteLine(x + y);
f();
}
private int i=0;//B的私有变量
}
class Program
{
static void Main(string[] args)
{
A a=new A();//调用
B b=new B();
a.print();
b.sum(1, 1);
}
}
继承:
继承的例子也在以上代码中,主要是父类的派生。继承允许我们根据一个类来定义另一个类来定义一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
abstract:
abstract可以用来修饰类,方法,属性,索引器和时间,这里不包括字段. 使用abstrac修饰的类,该类只能作为其他类的基类,不能实例化,而且abstract修饰的成员在派生类中必须全部实现,不允许部分实现,否则编译异常.C#中的abstract类不能被实例化,他只提供其他类的继承的接口。我自己理解成它就是作为子类而存在的,给其他class调用。目测很抽象。
例子:
abstract class MyAbs
{
public void HELLO()
{
Console.WriteLine("hello world");
}
}
class MyClass : MyAbs
{
}
class Program
{
static void Main(string[] args)
{
MyClass a = new MyClass();
a.HELLO();
//MyAbs b = new MyAbs();这是无法建立的
}
}
多态性:
多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。可以理解成出现函数同名的情况,但是参数类型,数量不同,出现不同性质的函数。
代码例子:
using System;
namespace PolymorphismApplication
{
class Printdata
{
void print(int i)//不同的参数类型
{
Console.WriteLine("Printing int: {0}", i );
}
void print(double f)
{
Console.WriteLine("Printing float: {0}" , f);
}
void print(string s)
{
Console.WriteLine("Printing string: {0}", s);
}
static void Main(string[] args)
{
Printdata p = new Printdata();
// 调用 print 来打印整数
p.print(5);
// 调用 print 来打印浮点数
p.print(500.263);
// 调用 print 来打印字符串
p.print("Hello C++");
Console.ReadKey();
}
}
}
目前感觉一些部分懵逼中
在此望:路过大佬,大牛,指导
class中的东西和继承、多态的概念的更多相关文章
- C++内存中的封装、继承、多态(上)
C++内存中的封装.继承.多态(上) 继我的上一篇文章:浅谈学习C++时用到的[封装继承多态]三个概念 此篇我们从C++对象内存布局和构造过程来具体分析C++中的封装.继承.多态. 一.封装模型的内存 ...
- java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包
Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...
- Java继承多态中的方法访问权限控制
java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...
- 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性
原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...
- python面向对象中的封装、继承、多态
封装 可以简单的理解为隐藏一切可以隐藏的实现细节,只向外界提供简单的编程接口.我们在类中定义的方法其实就是把数据和数据的操作封装起来了,在我们创建了对象之后,只需要给对象发送一个消息(调用方法)就可以 ...
- python基础语法15 面向对象2 继承,多态,继承json模块中JSONEncoder,并派生出新的功能
继承 1.什么是继承? 继承是一种新建类的方式,新建的类称之为子类或派生类,继承的父类称之为基类或超类. - 在Python中,一个子类可以继承多个父类.(面试可能会问) - 在其它语言中,一个子类只 ...
- Java开发知识之Java的继承多态跟接口*
Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...
- 第五节:详细讲解Java中的接口与继承
前言 大家好,给大家带来详细讲解Java中的接口与继承的概述,希望你们喜欢 什么是接口(interface) 接口中的方法都是抽象方法,public权限,全是抽象函数,不能生成对象 interface ...
- Python设计模式 - 基础 - 封装 & 继承 & 多态
面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...
随机推荐
- theOS环境搭建
http://joeyio.com/ios/2014/01/01/make-a-mobile-substrate-tweak-using-theos/~/Doucment>: cd mytwea ...
- hibernate exception nested transactions not supported 解决方法
开启事务之前先判断事务是否已经打开,方法如下: JdbcTransaction tx=(JdbcTransaction) session.beginTransaction(); 改为JdbcTrans ...
- [转载]Splay Tree数组实现+详解
变量声明:f[i]表示i的父结点,ch[i][0]表示i的左儿子,ch[i][1]表示i的右儿子,key[i]表示i的关键字(即结点i代表的那个数字),cnt[i]表示i结点的关键字出现的次数(相当于 ...
- C#委托和事件?策略模式?接口回调?还不清楚的赶紧来看我扯
早前学习委托的时候,写过一点东西,今天带着新的思考和认知,再记点东西.这篇文章扯到设计模式中的策略模式,观察者模式,还有.NET的特性之一--委托.真的,请相信我,我只是在扯淡...... 场景练习 ...
- fiddler - 测试手机端软件
在执行"Web测试"的时候,需要在PC配置HOSTS,那么当我们在执行"手机端测试"的时候需要如何配置HOSTS呢? iOS越狱后可以配置HOSTS,不过可能会引入bugs: Android使用ROO ...
- Slave_SQL_Runing:NO 复制出现问题的解决办法
--Slave_SQL_Runing:NO 复制出现问题的解决办法 -------------------------------------------------------2014/05/21 ...
- 前端布局之Flex语法
前端布局一直是CSS的一个重点应用,然而基于盒子模型的传统布局方案,依赖display + position + float 属性,对于某些特殊的布局非常不方便,比如:垂直居中就不容易实现.针对这一情 ...
- thymeleaf文本处理
文本处理 显示文本是网页开发的最基本需求,另外,国际化的程序当今也是相当必要的.这些问题,thymeleaf都可以轻松解决. th:text标签属性 这个属性的基本作用就是显示文本,它的值可以既可以从 ...
- Linux(Fedora) 安装 Oracle XE Database
Fedora 安装 Oracle XE Database Fedora 20Oracle XeOracle VM VirtualBoxFedora 安装oracle 数据库 环境: Oracle VM ...
- Jmeter之解决烦人的中文乱码问题
Jmeter是一款国外开源工具,所以就跟LR一样,对中文的支持不是很好,经常会有同学录制脚本后回放或者是发送HTTP请求,看到响应报文里面有乱码! 那如何才能解决这个问题呢?我们分2个情况来分析: 一 ...