C# 类的继承
1. 定义一个类,描述一个矩形,包含有长、宽两种属性,有一个无参数构造方法,对长宽赋初值为10,8;一个带两个参数方法,对长宽赋值;一个计算面积方法。编写一个测试类,对以上类进行测试,创建一个长方形,定义其长、宽,输出其面积。
定义一个长方体,继承上面的矩形类,新增一个属性:高,新增一个方法:计算长方体体积。创建两个长方体对象测试。
代码如下:
<span style="font-family:SimSun;font-size:18px;">class Rect
{
private int l;
private int w;
public Rect()
{
l = 10; w = 8;
}
public Rect(int a, int b)
{
l = a; w = b;
}
public int getArea()
{
int area;
area=l*w;
return area;
}
}
class 长方体 : Rect
{
private int h;
public int getTiji()
{
return getArea()* h;
}
public 长方体(int h)
{this.h = h;}
public 长方体(int l, int w, int h):base(l,w)
// 在子类构造方法中指定调父类带两个参数的构造方法
{this.h = h;}
}
class Test
{
static void Main(string[] args)
{
长方体 cft1 = new 长方体(4);
//创建子类对象会 先调用父类构造方法,再调用子类构造方法
//在子类构造方法中如果没有指定调用父类的哪个构造方法,
//则调父类默认不带参数的构造方法
Console.WriteLine("CFT1的底面积是"+cft1.getArea());
Console.WriteLine("CFT1的体积是" + cft1.getTiji());
长方体 cft2 = new 长方体(5, 7, 9);
Console.WriteLine("CFT1的底面积是" + cft2.getArea());
Console.WriteLine("CFT1的体积是" + cft2.getTiji());
}
}</span>
运行结果:
2. 对长方体新增一个方法。求表面积,
要求长方体的表面积,必须要得到长、宽,但长、宽是父类的私有成员,必须通过父类提供的属性或方法获得。
程序代码修改如下:
<span style="font-family:SimSun;font-size:18px;">class Rect
{
private int l;
private int w;
<span style="color:#FF0000;"> public int W
{get { return w; }}</span>
public Rect(){l = 10; w = 8;}
public Rect(int a, int b){l = a; w = b;}
public int getArea()
{
int area;
area=l*w;
return area;
}
<span style="color:#FF0000;"> public int getL(){return l;}
</span>
}
class 长方体 : Rect
{
int h;
public int gettiji()
{
// return l * w* h; 错:l,w在父类中是私有的,在派生类中不能直接使用
return getArea() * h;
}
public 长方体(int h){this.h = h;}
public 长方体(int l, int w, int h):base(l,w)
//在子类构造方法中通过base 指明调用父类带两个参数的构造方法
{this.h = h;}
<span style="color:#FF0000;">public int 表面积(){return 2 * (getL() * h + getL() * W + W * h);}</span>
}
class Test
{
static void Main(string[] args)
{
//Rect rect1 = new Rect();
//Rect rect2 = new Rect(6, 8);
//Console.WriteLine(rect1.getArea());
//Console.WriteLine(rect2.getArea());
长方体 cft = new 长方体(5);
//子类构造方法执行: 先父类构造方法,再子类构造方法
//如果子类构造方法中没有指明要调用父类某构造方法,则调用父类中无参数的构造方法
Console.WriteLine(" 此长方体的底面积是:" + cft.getArea());
Console.WriteLine(" 此长方体的体积是:" + cft.gettiji());
长方体 cft2 = new 长方体(3, 5, 7);
Console.WriteLine(" 此长方体的底面积是:" + cft2.getArea());
Console.WriteLine(" 此长方体的体积是:" + cft2.gettiji());
<span style="color:#FF0000;">Console.WriteLine(" 此长方体的表面积是:" + cft2.表面积());</span>
}
}</span>3.定义一个人类people,包括属性:name;包括方法:
Public void 吃饭()
功能是输出“ 某某人要吃饭”
Pulbic void 工作()
功能是输出“ 某某人要工作”
(1)根据人类,派生一个学生类student,增加属性:学校、学号;重写工作方法(学生的工作是学习)。
(2)根据人类,派生一个工人类,增加属性:单位、工龄;重写工作方法(工人的工作是……自己想吧)。
所有类定义必要的方法(可以是构造方法,也可以是一般方法)对相应的属性赋值。
(4)编写主函数分别对上述3类创建对象进行测试。
代码如下:
<span style="font-family:SimSun;font-size:18px;">namespace 多态与person
{
class person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
public void 吃饭()
{
Console.WriteLine(this.name + "要吃饭");
}
public virtual void 工作()
{
Console.WriteLine( this.name + "要工作");
}
}
class student :person
{
private string 学校;
public string 学校1
{
get { return 学校; }
set { 学校 = value; }
}
private string 学号;
public string 学号1
{
get { return 学号; }
set { 学号 = value; }
}
public override void 工作()
{
Console.WriteLine("{0} {1} {2} 要学习",this.学校,this.学号,this.Name);
}
}
class worker :person
{
private string 单位;
public string 单位1
{
get { return 单位; }
set { 单位 = value; }
}
private int 工龄;
public int 工龄1
{
get { return 工龄; }
set { 工龄 = value; }
}
public override void 工作()
{
Console.WriteLine("{0} {1} {2} 要开发软件",this.单位,this.Name,this.工龄);
}
}
class Program
{
static void Main(string[] args)
{
person p = new person();
p.Name = "二狗子";
p.吃饭();
p.工作();
student s = new student();
s.Name = p.Name;
s.学号1 = "20122018000000";
s.学校1 = "XX名牌大学";
s.工作();
worker w = new worker();
w.Name = p.Name;
w.单位1 = "XXX工作室";
w.工龄1 = 3;
w.工作();
Console.ReadLine();
}
}
}</span>
运行结果:
275



被折叠的 条评论
为什么被折叠?



