面向对象练习

来源:互联网 发布:大富豪棋牌源码3.4.1 编辑:程序博客网 时间:2024/06/05 18:48
/* 面向对象练习 (题干见本文尾)*//* C# */using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Test_004{    class Program    {        static void Main(string[] args)        {            Person person = new Person("张三",'男',1990);            Person person2 = new Person();            Console.WriteLine(person.ToString());            Console.WriteLine(person2.ToString());            Console.WriteLine(person.Equals(person2));            Student student =             new Student("张三",'男',1990,2015001,70,80,90);            Student student2 = new Student();            Console.WriteLine(student.ToString());            Console.WriteLine(student2.ToString());            Console.WriteLine(student.Equals(student2));            Console.ReadLine();        }    }    class Person    {        private string name;        private char sex;        private int year;        public string Name        {            get { return name; }            set { name = value; }        }        public Char Sex        {            get { return sex; }            set { sex = value; }        }        public int Year        {            get { return year; }            set { year = value; }        }        public int Age        {            get { return (2017 - year); }        }        public Person(string Name,char Sex,int Year)        {            this.name = Name;            this.sex = Sex;            this.year = Year;        }        public Person()        {            this.name = "匿名";            this.sex = '男';            this.year = 2015;        }        public override string ToString()        {            //return base.ToString();            return name + " " + sex + " " + year;        }        public override bool Equals(object obj)        {            if (obj == null || !obj.GetType().Equals(this.GetType()))                return false;            if (obj == this)                return true;            Person you = (Person)obj;            return (this.name == you.name &&                 this.sex == you.sex && this.year == you.year);            //return base.Equals(obj);        }    }    class Student : Person    {        private long number;        private double phi, eng, comp;        public long Number        {            get { return number; }            set { number = value; }        }        public double Phi        {            get { return phi; }            set { phi = value; }        }        public double Eng        {            get { return eng; }            set { eng = value; }        }        public double Comp        {            get { return comp; }            set { comp = value; }        }        public double Avg        {            get { return (phi + eng + comp) / 3; }        }        public Student(string Name, char Sex, int Year,         long Number, double Phi, double Eng, double Comp)            : base(Name, Sex, Year)        {            this.number = Number;            this.phi = Phi; this.eng = Eng; this.comp = Comp;        }        public Student()            : base()        {            this.number = 0;            this.phi = this.eng = this.comp = 0;        }        public override string ToString()        {            //return base.ToString();            return Name + " " + Sex + " " + Year + " " + number;         }        public override bool Equals(object obj)        {            //return base.Equals(obj);            if (obj == null || !(obj.GetType().Equals(this.GetType())))                return false;            if (obj == this)                return true;            Student you = (Student) obj;            return (this.number == you.number &&                this.Name == you.Name && this.Sex == you.Sex);        }    }}/* problem describe */ /* 定义一个学生类 Student,它继承自 Person 类。(1)Person类:字段(私有的):   姓名(name),字符串类型(String);   性别(sex),字符型(char);   出生年份(year),整型(int)。属性(公有的):   姓名:可读/写   性别:可读/写   出生年份:可读/写   年龄:只读成员方法:   构造函数(两个):a)  第一个:将姓名,性别,出生年份字段初始化为指定的值b)  第二个:未指定任何字段值,则将姓名初始化为“匿名”,姓别初始化为“男”,出生年份初始化为“2015”。此构造函数通过调用第一个构造函数,初始化姓名、性别和出生年份。   重写ToString方法,使得该方法返回如下格式字符串(以“张三,男,1990”为例):姓名:张三,性别:男,出生年份:1990   重写Person类的Equals方法,当且仅当两人的姓名相等且性别相等且出生年份相等时,认为两人是同一个人。(2)Student 类继承自Person类:新增加的字段(私有的):   学号(number):长整型;   三门功课的成绩:哲学(phi),double;英语 (eng),double;计算机(comp),double新增加的属性   学号:可读/写;   哲学成绩,英语成绩,计算机成绩:可读/写   平均成绩(Avg):只读新增加的方法:   构造函数(两个):a)  第一个:将所有字段初始化为指定的值,其中姓名、性别、出生年份通过调用父类的构造函数初始化;b)  第二个:未指定任何字段值,学号初始化为0,各门课的成绩都初始化为0,姓名,性别和出生年份通过调用父类的构造函数将其分别初始化为“匿名”,“男”,“2015”。   覆盖父类的ToString()方法:使得该方法返回如下格式字符串,以“张三,男,1990,1001(学号)”为例姓名:张三,性别:男,年龄20,平均成绩:90,最高分:99   覆盖父类的Equals:只要两个Student对象的学号、姓名和性别相等时,认为两学生相等。(3)试自行编写一段测试程序,测试Person和Student的构造方法和属性是否能正常使用,测试重写的ToString    和Equals方法是否运行正常。 */