1,封装(字段和属性)
属性字段使用private修饰。使用get和set方法进行封装来访问。
隐式参数value,也可以选中字段,右键重构封装,使用模板代码,快捷键Ctrl+R,E
class Program
{
static void Main(string[] args)
{
Student stu = new Student();
stu.Name = "tom";
Console.WriteLine(stu.Name);
}
}
//类的定义
public class Student
{
//类的属性
private string name;
public string Name
{
get
{
return this.name;
}
set
{
//对输入的合法性进行判断再赋值
//隐式参数value
this.name = value;
}
}
}
2,继承
继承
class Program
{
static void Main(string[] args)
{
Student stu = new Student();
stu.name = "tom";
Console.WriteLine(stu.name);
}
}
//基类
public class Person
{
//类的属性
public string name;
}
//Student继承Person
public class Student:Person
{
}
调用父类的构造函数 : base
class Program
{
static void Main(string[] args)
{
Student stu = new Student("tom");
Console.WriteLine(stu.name);
}
}
//基类
public class Person
{
//类的属性
public string name;
public Person(string name){
this.name = name;
}
}
//Student继承Person
public class Student:Person
{
public Student(string name)
: base(name)
{
}
}
子类方法和父类重名
子类方法使用 new 修饰表示对父类方法的覆盖
virtual虚方法
修饰的方法,子类可以进行重写,使用override 进行重写声明(只能针对virtual修饰的方法)
class Program
{
static void Main(string[] args)
{
Student stu = new Student("tom");
Console.WriteLine(stu.name);
}
}
//基类
public class Person
{
//类的属性
public string name;
public Person(string name){
this.name = name;
}
public virtual void Say(){
}
}
//Student继承Person
public class Student:Person
{
public Student(string name)
: base(name)
{
}
public override void Say()
{
base.Say();
}
}
3,多态
多个不属于同类的对象,对同一个消息(抽象类方法的不同实现)做出不同的反应。
抽象类
使用abstract修饰。抽象类本身不能被实例化,只能作为其他类的基类使用。
抽象类不能实例化
抽象类不能被继承
子类必须重写抽象父类的抽象方法(override)
接口interface
只提供定义而不提供实现。是一个特殊的抽象方法,子类实现该方法的时候不需要使用override。
接口和抽象类不同,没有字段和属性,只定义方法。
子类只能继承一个抽象类,但是可以实现多个接口。