面向对象三大特征,继承,封装,多态
1.0 封装,通过定义类并且给类的属性和方法加上访问修饰符来抽象事物的本质特征
2.0 继承,一个类可以从它祖先(父类)哪里获得已有的成员和行为。
3.0 多态,程序通过一个一般的父类的引用用来实现在多个子类的方法,即调用方法时,实际被调用的代码和对象的实列有关
c++是通过指针或引用(&,变量别名)实现多态的,和c#不同,java多态实现和c#相同。
类的定义
格式
<类修饰符>class<类名>
{
数据成员;
函数;
嵌套的类型;
}
<hr>
保护方式
修饰符 | 说明 |
---|---|
abstract | 抽象类,即不能创建该类 的实列 |
internal | 该类只能从同一个程序集的其它类中访问。这是非嵌套类型的默认访问类型。如果没有指定修饰符,则该类的默认访问方式为internal |
new | 只用于嵌套类。它指明该类隐藏一个同名被继承的成员 |
private | 嵌套类。只能在定义它的类中访问 |
protected | 嵌套类,只能成定义它的类和至此派生的类中访问 |
public | 该类的实列可以被 其它任何类访问 |
sealed | 该类不能作为其它类的父类,即该类不能被继承 |
感觉c# 关键字internal和 java的default差不多(但是不对,我说不清)。
sealed修饰的类不能被继承,在java中可以通过final修饰类实现
类的实列化
和java一样,c sharp中所有的类都看成是 引用类型,与c++不同,如 A a;该语句只是声明了一个指向类的引用,并没有创建一个实际的对象实列
类的成员
类的成员可以分为二大类,一是本身声明的, 二是从父类继承来的。
类成员 | 说明 |
---|---|
成员常量 | 代表与类相关联的常量值 |
域 | 类中的变量 |
成员方法 | 执行类中的复杂计算和其它操作 |
属性 | 定义类中的值, 并对它们进行读写操作 |
事件 | 说明发生了什么事情 |
对类的成员访问
在code中,可以对类的成员采用不同的访问符修饰。
1.0 公有成员(public)提供类的外部界面,允许外部访问类。
2.0 私有成员(private)仅仅限于类中的成员访问,如果声明没有出现成员访问,则默认为private。
3.0 保护成员(protected)可以被子类访问,但是对外界封装。
4.0 内部成员(internal)只对同一包或者库成员透明,其它成员禁止访问。
this关键字
在构造函数,类的方法和类的实列中使用。
1.0 在类的构造函数中出现的this,作为一个值类型,表示对正在构造的对象本身的引用。
2.0 在类的方法出现的this作为值类型,表示对调用该方法的对象引用。
3.0 在结构的构造函数中出现的this作为变量类型,表示对正在构造的结构引用。
4.0 在结构的方法出现的this作为变量类型,表示对调用该方法的结构引用。
成员常量
保留字const用于声明常量,后跟数据类型声明,类的常量可以使用new,public,private,public,protected,等修饰。
在java中可以用final实现常量声明。
自己构思一个相关的代码
汗,vs出了点问题,折腾死了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication4
{
public abstract class Animal
{
public string color;
internal string name;
protected int height; //不能被子类继承
//抽象方法不能被声明为私有,子类要实现它
public abstract void printName();
}
public class Dog : Animal
{
public static string d = "dog";
public Dog(string name, string color)
{
this.name = name;
this.color = color;
}
public override void printName()
{
Console.WriteLine("my name is " + name);
}
//外部不能访问。只能在dog类中访问
private void printColor()
{
Console.WriteLine("my color is " + color);
}
public void printDog()
{
printName();
printColor();
}
}
public class SBC : Dog
{
//隐藏一个同名被继承的成员d
new public static string d = "sbc";
public void disp()
{
Console.WriteLine("sbc d=" + d);
Console.WriteLine("Dog d=" + Dog.d);
}
public SBC(string name, string color) : base(name, color)
{
}
}
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog("dog", "black");
dog.printName();
Console.WriteLine("----------------");
dog.printDog();
Console.WriteLine("----------------");
SBC sbc = new SBC("sbc", "yellow");
sbc.printDog();
Console.WriteLine("----------------");
sbc.disp();
Console.Read();
}
}
}
结果
my name is dog
----------------
my name is dog
my color is black
----------------
my name is sbc
my color is yellow
----------------
sbc d=sbc
Dog d=dog
参考文章:
微软internal
new 修饰符
读《C# 和 Java 的比较》有感
以后文章首先发慕课网了,简书差评。