Mục lục chương I: ĐỐi tưỢng và LỚP



tải về 1.36 Mb.
trang25/28
Chuyển đổi dữ liệu21.12.2018
Kích1.36 Mb.
1   ...   20   21   22   23   24   25   26   27   28

MỘT SỐ CÂU HỎI LÝ THUYẾT:



Câu 1: Có cần thiết phải chỉ định từ khóa override trong phương thức phủ quyết của lớp dẫn xuất hay không?

Trả lời: Có, chúng ta phải khai báo rõ ràng từ khóa override với phương thức phủ quyết phương thức ảo (của lớp cơ sở ) bên trong lớp dẫn xuất.

Câu 2: Lớp trừu tượng là thế nào? Có thể tạo đối tượng cho lớp trừu tượng hay không?

Trả lời: Lớp trừu tượng không có sự thực thi, các phương thức của nó được tạo ra chỉ là hình thức, tức là chỉ có khai báo, do vậy phần định nghĩa bắt buộc phải được thực hiện ở các lớp dẫn xuất từ lớp trừu tượng này. Do chỉ là lớp trừu tượng, không có sự thực thi nên chúng ta không thể tạo thể hiện hay tạo đối tượng cho lớp trừu tượng này.

Câu 3: Có phải khi tạo một lớp thì phải kế thừa từ một lớp nào không?

Trả lời: Không nhất thiết như vậy, tuy nhiên trong C#, thì tất cả các lớp được tạo điều phải dẫn xuất từ lớp Object. Cho dù chúng có được khai báo tường minh hay không. Do đó Object là lớp gốc của tất cả các lớp được xây dựng trong C#. Một điều thú vị là các kiểu dữ liệu giá trị như kiểu nguyên, thực, ký tự cũng được dẫn xuất từ Object

Câu 4: Lớp lồng bên trong một lớp là như thế ?

Trả lời: Lớp lồng bên trong một lớp hay còn gọi là lớp nội được khai báo với từ khóa internal, chứa bên trong phạm vi của một lớp. Lớp nội có thể truy cập được các thành viên private của lớp mà nó chứa bên trong.

Câu 5: Chương trình sau đây có lỗi, hãy sửa lỗi biên dịch và chạy chương trình.Lệnh nào gây ra lỗi và nguyên nhân gây lỗi.

class A

{

private int x;



public A()

{

x=2;



}

public A(int x)

{

this.x=x;

}

}

class B:A



{

private int y;

public B():base()

{

y=3;



}

public B(int x,int y):base(x)

{

this.y=y;

}

public int tong()

{

return x + y;

}

}

class teater



{

static void Main(string[] args)

{

B h = new B(2,3);



Console.WriteLine("Gia tri cua tong:{0}", h.tong());

Console.ReadLine();

}

}


Trả lời 5: Chương trình trên khi biên dịch có 1 lỗi “.A.x is inaccessible due to its protection level”.

Câu lệnh gây ra lỗi là: return x + y;

Nguyên nhân gây ra lỗi: Lớp B kế thừa thuộc tính x của lớp A. Mà ta thấy thuộc tính x của lớp A là private nên nó chỉ được sử dụng trong lớp và không cho phép lớp khác kế thừa.

Cách sửa: Lớp B muốn kế thừa thuộc tính x của lớp A thì trong lớp A ta xây dựng thuộc tính x là protected.

Kết quả chương trình: Giá trị của tổng=5


  1. CÂU HỎI TỰ TRẢ LỜI


Câu 1: Theo bạn phương thức đa hình và phương thức trừu tượng :

a. Cùng là một phương thức ảo.

b. Là phương thức ảo có ý nghĩa sử dụng giống nhau nhưng cách xây dựng hai phương thức lại khác nhau.

c. Hai phương thức này thực chất là một phương thức



Câu 2: Khi khai báo phương thức trong lớp kế thừa mà có tên trùng với tên của phương thức trong lớp cơ sở thì:

a. Phải sử dụng từ khoá new để che giấu phương thức.

b. Không cần thiết phải sử dụng từ khoá new

c. Thay đổi bằng cách khai báo tham số sử dụng của phương thức.



Câu 3: Một phương thức ảo trong lớp cơ sở có nhất thiết phải được phủ quyết trong lớp dẫn xuất hay không?

Câu 4: Lớp trừu tượng có cần thiết phải xây dựng hay không? Hãy cho một ví dụ về một lớp trừu tượng cho một số lớp.

Câu 5: Lớp cô lập là gì? Có thể khai báo protected cho các thành viên của nó được không?

Câu 6: Lớp Object cung cấp những phương thức nào mà các lớp khác thường xuyên kế thừa để sử dụng.

Câu 7: Thế nào là boxing và unboxing? Hãy cho biết hai ví dụ về quá trình này?

Câu 8: Định nghĩa nào sau đây định nghĩa rõ lớp trừu tượng hợp lệ

class A

{

abstract void unfinished() {}

}

class B

{

abstract void unfinished();

}

abstract class C

{

abstract void unfinished();

}

public class abstract D

{

abstract void unfinished();

}



Câu 9: Chương trình sau đây có lỗi, hãy sửa lỗi biên dịch và chạy chương trình.Lệnh nào gây ra lỗi và nguyên nhân gây lỗi.

using System;

abstract public class Dongvat

{

protected string name;



public abstract void Who();

public Dongvat(string name)

{

this.name=name ;

}

}

class cho:Dongvat



{

private string color;

public cho(string name,string color):base(name)

{

this.color=color ;}

{

Console.WriteLine ("Toi la con cho {0} mau {1}",name ,color );



}

}

class meo:Dongvat

{

private int trongluong;

public meo(string name,int trongluong):base(name)

{

this.trongluong=trongluong ;

}

public override void Who()

{

Console.WriteLine ("Toi la con meo{0}nang{1}",name,trongluong);



}

}

class tester

{

static void Main(string[] args)

{

Dongvat[] ds = new Dongvat[3];



ds[0] = new cho("John", "vang");

ds[1] = new meo("Muop", 2);

ds[2] = new Dongvat("Noname");

for (int i = 0; i < 3; i++)

{

ds[i].Who();



}

Console.ReadLine();

}

}

}





Câu 10: Phân biệt mục đích sử dụng của các từ khoá sau: new, virtual, override.



  1. Поделитесь с Вашими друзьями:
1   ...   20   21   22   23   24   25   26   27   28


Cơ sở dữ liệu được bảo vệ bởi bản quyền ©tieuluan.info 2019
được sử dụng cho việc quản lý

    Quê hương