2、子类的构造函数
(1)子类初始化原则:“先父类,后自已”
(2)若子类构造函数没有显式调用其它构造函数(父类或本类),则隐式调用父类的无参构造函数
(3)显式调用父类的构造函数,必须用构造函数初始化器(:base(参数))
(4)构造函数初始化器
(5)子类中至少有一个实例构造函数显式或隐式调用直接父类的实例构造函数
例1:定义学生类(Student)
using System;
class Person
{
private string name;
private int age;
public Person(string name, int age)
{
Name = name;
Age = age;
}
public Person()
: this("<no name>", 0)
{
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public int Age
{
get
{
return age;
}
set
{
if (value > 0 && value < 200)
{
age = value;
}
}
}
public string ConvertToString()
{
return "我是一个人";
}
}
class Student : Person
{
private string sNo;
writeline函数private int score;
public Student(string sNo, string name, int age, int score) : base(name, age)
{
this.sNo = sNo;
if (score >= 0 && score <= 100)
{
this.score = score;
}
}
public Student()
: this("0000", "<no name>", 0, 0)
{
}
public string GetNo()
{
return sNo;
}
public int GetScore()
{
return score;
}
public new string ConvertToString()
{
return "我是一名学生";
}
}
class StudentTest
{
public static void Main()
{
Student s1 = new Student("0001", "张三", 18, 90);
Student s2 = new Student("0002", "李四", 20, 80);
float aver = (float)(s1.GetScore() + s2.GetScore()) / 2;
Console.WriteLine(s1.ConvertToString());
Console.WriteLine(s2.ConvertToString());
Console.WriteLine("平均成绩:{0:F2}", aver);
}
}
3、隐藏从父类继承的成员(使用new修饰符显式修饰)
(1)隐藏手段------ 在子类中定义与父类同名的字段或相同签名的方法
(2)可见的成员才可以隐藏,被隐藏的父类成员依然存在,可通过base.成员(句柄)来访问
(3)隐藏深度
例2:定义Rectangle类(矩形类)、Square类(正方形类)
using System;
class Rectangle
{
private int length;
private int width;
public int Length
{
get{ }
set
{
}
}
public int Width
{
get{ }
set
{
}
}
public Rectangle(int length, int width) {
}
public Rectangle()
{
}
public int GetArea()
{
}
public int GetPerimeter() // 周长
{
}
public string ConvertToString()
{
return"我是一个长方形";
}
}
class Square : Rectangle
{
public Square(int side)
{
}
public Square()
{
}
public new int Length
{
get{ }
set{ }
}
public new int Width
{
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论