30/09/2018, 18:11
Cách sử dụng đa kế thừa và đa hình trong C#?
cho e hỏi 2 cái đó sửa dụng sao ạ tại sao e xài thừa kế rồi nhưng k gọi ra được, vấn đề 2 là chạy mảng thì nó chỉ chạy được mảng cha ban đầu còn mảng con thừa kế nó k chạy. ai bít chỉ e với
class Program
{
class Thongtin
{
private string name;
private int year;
private string bangcap;
public Thongtin()
{
name = null;
year = 0;
bangcap = null;
}
public Thongtin(string n,int y,string b)
{
name = n;
year = y;
bangcap = b;
}
public Thongtin(Thongtin th)
{
name = th.name;
year = th.year;
bangcap = th.bangcap;
}
public void nhap()
{
Console.Write("NHAP HO TEN: ");
name = Console.ReadLine();
Console.Write("NHAP NAM SINH: ");
year = int.Parse(Console.ReadLine());
Console.Write("NHAP BANG CAP: ");
bangcap = Console.ReadLine();
}
public void xuat()
{
Console.WriteLine("HO TEN: {0}", name);
Console.WriteLine("NAM SINH: {0}", year);
Console.WriteLine("HO TEN: {0}", name);
}
}
class NQL : Thongtin // := extends ben java, dung de ke thua
{
private string chucvu;
private int songay;
private double bacluong;
public NQL()
{
chucvu = null;
songay = 0;
bacluong = 0;
}
//base:ke thua giong nhu super ben java
public NQL(string name, int year, string bangcap, string c, int s, double bl)
: base(name, year, bangcap)
{
chucvu = c;
songay = s;
bacluong = bl;
}
public NQL(NQL nq)
{
chucvu = nq.chucvu;
songay = nq.songay;
bacluong = nq.bacluong;
}
public void nhap()
{
base.nhap();//goi ham ke thua cua thong tin
Console.Write("NHAP CHUC VU: ");
chucvu = Console.ReadLine();
Console.Write("NHAP SO NGAY CONG: ");
songay = int.Parse(Console.ReadLine());
Console.Write("NHAP BAC LUONG: ");
bacluong = double.Parse(Console.ReadLine());
}
public void xuat()
{
base.xuat();//goi ham ke thua cua thong tin
Console.WriteLine("CHUC VU: {0}", chucvu);
Console.WriteLine("SO NGAY CONG: {0}", songay);
Console.WriteLine("BAC LUONG: {0}", bacluong);
Console.WriteLine("Luong: {0}", Tinhluong());
}
public double Tinhluong()
{
double tinhluong = songay * bacluong;
return tinhluong;
}
}
class NKH:NQL
{
private int sobai;
public NKH()
{
sobai = 0;
}
public NKH(string name, int year, string bangcap, string chucvu, int songay, double bacluong, int sb) : base(name, year, bangcap, chucvu, songay, bacluong)
{
sobai = sb;
}
public NKH(NKH nk)
{
sobai = nk.sobai;
}
public void nhap()
{
base.nhap();
Console.Write("NHAP SO BAI DA CONG BO: ");
sobai = int.Parse(Console.ReadLine());
}
public void xuat()
{
base.xuat();
Console.WriteLine("SO BAI DA CONG BO: {0}", sobai);
base.Tinhluong();
}
}
class NVPTN : Thongtin
{
private double luong;
public NVPTN()
{
luong = 0;
}
public NVPTN(string name, int year, string bangcap, double l)
: base(name, year, bangcap)
{
luong = l;
}
public NVPTN(NVPTN nv)
{
luong = nv.luong;
}
public void nhap()
{
base.nhap();
Console.Write("NHAP LUONG: ");
luong = double.Parse(Console.ReadLine());
}
public void xuat()
{
base.xuat();
Console.WriteLine("LUONG: {0}", luong);
Console.WriteLine("Luong: {0}", luong);
}
}
class Demo
{
static void Main(string[] args)
{
System.Console.OutputEncoding = Encoding.UTF8;
Thongtin[] DSTT;
int ntt = 100;
int n = 0;
DSTT = new Thongtin[ntt];
int menu = 1;
do
{
Console.WriteLine("1.NHÀ KHOA HỌC ");
Console.WriteLine("2.NHÀ QUẢN LÝ ");
Console.WriteLine("3.NHÂN VIÊN PHÒNG THÍ NGHIỆM ");
Console.WriteLine("4.XUẤT THÔNG TIN ");
Console.WriteLine("5.TỔNG LƯƠNG ĐÃ TRẢ ");
Console.WriteLine("6.THOÁT ");
Console.Write("===BẠN CHỌN===: ");
menu = int.Parse(Console.ReadLine());
switch (menu)
{
case 1:
{
DSTT[n] = new NQL();
DSTT[n].nhap();
n++;
break;
}
case 2:
{
DSTT[n] = new NKH();
DSTT[n].nhap();
n++;
break;
}
case 3:
{
DSTT[n] = new NVPTN();
DSTT[n].nhap();
break;
}
case 4:
{
for (int i = 0; i < n; i++)
{
DSTT[i].xuat();
}
break;
}
default: menu = 0; break;
}
} while (menu != 0);
Console.ReadLine();
}
}
}indent preformatted text by 4 spaces
Bài liên quan
Nhìn sơ rối qua! nhưng thấy điều này: Lớp Cơ sở (lớp được kế thừa) phải là lớp ảo (abstract)