当实例化一个类时,系统会自动对这个类的属性进行初始化
数字型初始化成0/0.0
string类型初始化成null
char类型初始化成\0
构造器就是构造方法,能够被重载(同类中不同参数列表的构造器),
不能够被重写(子类使用super方法可以调用)。
不能说能被继承,因为能够调用,但是不能重写。
使用构造方法的好处:
1.对多个属性进行赋值时,不需要重复的写实例名
2.可以保证用户在new一个对象时,必须对某一个属性进行赋值
3,在创建对象时,对制度属性进行初始化
当我们定义好一个类后,如果没有写构造方法,那么系统会自动给我们加上一个默认的没有参数的构造方法,在这个构造方法中,什么也不做,我们也看不到
我们可以定义一个构造方法:
构造方法是一个特殊的方法,他的名字和类的名字相同,并且没有返回值,连void都可以省略不写,我们一旦手写一个构造方法后,系统原先默认给我们添加的那个无参的构造方法就不会给我们添加了
要实例化一个类,必须调用他的构造方法
总结:
构造方法用来创建对象,并且可以在构造方法中对对象进行初始化
构造方法是用来创建对象的特殊方法,方法名和类名一样,没有返回值,连void都不用
构造方法可以有参数,new对象的时候传递参数即可
如果不指定构造方法,则类有一个默认的无参构造方法
如果指定了构造方法,则不再有默认的无参构造方法,如果需要无参构造方法,则需要自己来写
构造方法可以重载,也就是有多个参数不同的构造方法。
练习:
写一个Ticket类,有一个距离属性(本属性只读,在构造方法中赋值),不能为负数,有一个价格属性,价格属性为只读,并且根据距离计算价格(1元/公里):
0-100公里:票价不打折
101-200公里 :总额打9.5折
201-300公里:总额打9折
300公里以上:总额打8折
有一个方法,可以显示这张票的信息
代码如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace 构造方法
{
class Ticket
{
public Ticket(double length)
{
this.length = length;
}
double length;
double price;
public double Length
{
get
{
if (length < 0)
{
length = 0;
}
return length;
}
}
public double Price
{
get
{
if (length <= 100)
{
price = length;
}
else if (length > 100 && length <= 200)
{
price = 0.95 * length;
}
else if (length > 200 && length <= 300)
{
price = 0.9 * length;
}
else if (length > 300)
{
price = 0.8 * length;
}
return price;
}
}
public void ShowInfo()
{
Console.WriteLine("距离:{0},票价:{1}",Length,Price);
}
}
}