1:什么是继承?代码举例说明
public class Person
{
public string name; //定义域
public int age;
virtual public void SayHello()
{ //定义方法 //virtual表示可以被子类override
Console.WriteLine("Hello! My name is " + name);
}
public void SayHello(Person another)
{ //构造方法重载同名的sayHello方法
Console.WriteLine("Hello," + another.name +
"! My name is " + name);
}
public bool IsOlderThan(int anAge)
{ //定义方法
bool flg;
if (age > anAge) flg = true; else flg = false;
return flg;
}
public Person(string n, int a)
{ //构造方法
name = n;
age = a;
}
public Person(string n)
{ //构造方法重载
name = n;
age = -1;
}
public Person() : this("", 0)//调用其他构造方法
{
}
}
public class Student : Person //定义子类
{
public string school; //增加的字段
public int score = 0;
public bool isGoodStudent()
{ //增加的方法
return score >= 90;
}
override public void SayHello()
{ //override覆盖父类的方法
base.SayHello();
Console.WriteLine("My school is " + school);
}
public void SayHello(Student another)
{ //增加的方法
Console.WriteLine("Hi!");
if (school == another.school)
Console.WriteLine(" Shoolmates ");
}
public Student()
{ //构造方法
}
public Student(string name, int age, string school)
: base(name, age) //调用父类的构造方法
{
this.school = school;
}
public void TestThisSuper()
{
int a;
a = age; //本句与以下两句效果相同
a = this.age; //使用this
a = base.age; //使用base
}
}
class Program
{
static void Main(string[] args)
{
Person p = new Person("Liming", 50);
Student s = new Student("Wangqiang", 20, "PKU");
Person p2 = new Student("Zhangyi", 18, "THU");
Student s2 = (Student)p2; //类型转换
}
2:什么是多态?代码举例说明
static void Main(string[] args)
{
Animal Animal = new Animal();
Animal dog = new dog(); //允许将子类类型的指针赋值给父类类型的指针。
Animal cat = new cat();
Animal cattle = new cattle();
Animal.sounds();
dog.sounds(); //接口重用
cat.sounds();
cattle.sounds();
Console.ReadKey();
}
}
class Animal
{
public virtual void sounds() //通过虚函数实现
{
Console.WriteLine("动物的叫声");
}
}
class dog : Animal
{
public override void sounds() //重写、覆盖
{
Console.WriteLine("狗的叫声:旺旺...");
}
}
class cat : Animal
{
public override void sounds()
{
Console.WriteLine("猫的叫声:喵喵...");
}
}
class cattle : Animal
{
public override void sounds()
{
Console.WriteLine("牛的叫声:哞哞...");
}
}
3:什么是抽象类?代码举例说明
public abstract class Animal
{
protected string face;
protected Animal() { this.face = "^_^"; /*抽象类构造函数初始化的例子*/}
public abstract void eat();
public abstract string Face
{
get;
}
}
public class dog : Animal
{
//重写基类中的抽象访问器Face
public override string Face
{
get
{
return face;
}
}
//重写基类中的抽象方法eat
public override void eat()
{
Console.WriteLine("狗吃骨头 " + Face);
}
}
public class cat : Animal
{
public override string Face
{
get
{
return face;
}
}
public override void eat()
{
Console.WriteLine("猫吃鱼 " + Face);
}
}
public class panda : Animal
{
public override string Face
{
get
{
return face;
}
}
public override void eat()
{
Console.WriteLine("熊猫吃竹子 " + Face);
}
}
public class MainFun
{
static void Main()
{
Animal[] anim = new Animal[3];
anim[0] = new dog();
anim[1] = new cat();
anim[2] = new panda();
anim[0].eat();
anim[1].eat();
anim[2].eat();
Console.ReadKey();
}
}
4:抽象类和接口的相同点和不同点?
相同点:
1.抽象类和接口都不能实例化对象,但是可以定义抽象类和接口类型的引用;
2.继承抽象类和实现接口都要对其中的抽象方法全部实现;
不同点:
1.接口比抽象类更加抽象,抽象类中可以定义构造方法(构造器),可以有抽象方法和具体方法,
而接口中的方法全部都是抽象方法(接口中也可以没有方法,这样的接口称为空接口)
2.抽象类中的方法可以是private,protected,public,接口全部都是public
3.抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量(final)
4.有抽象方法的类必须声明为抽象类,而抽象方法未必要有抽象方法
5:抽象方法和虚方法的不同点和相同点?
抽象方法用abstract修饰
不允许有方法体
必须被子类override
只能在抽象类中
虚方法用virtual修饰
要有方法体,哪怕是一个分号
可以被子类override
除了密封类外都可以写
6:定义抽象类和抽象方法的关键字?
关键字:abstract
7:书本上XML那一章中有哪些方法?代码一一举例
public void Read(string path) {
//创建XML对象
XmlDocument doc=new XmlDocument();
//读取Xml文档
doc.Load(path);
//读取根节点
XmlNode engineer = doc.DocumentElement;
//循环遍历子节点
foreach (XmlNode node in engineer.ChildNodes)
{
}
}
8:书本上文件那一章中有哪些方法?代码一一举例
///检查文件是否存在
public void isExists(string path)
{
if (File.Exists(path))
{
Console.WriteLine("该文件存在");
}
}
///复制
public void Copy(string num, string mum)
{
File.Copy(num, mum);
}
///移动
public void lin(string num)
{
File.Delete(num);
}
///删除
public void lin(string num, string mum)
{
File.Move(num, mum);
}