class Student {
}
public class Man extends Student {
public static void main(String[] args) {
Man m = new Student();
}
}
Đoạn mã sau có lỗi biên dịch nào?. Chọn một câu trả lời
A. Không có lỗi biên dịch.
B. Có lỗi biên dịch: Incompatible type, required Man, found Student.
C. Có lỗi biên dịch:Incompatible type, required Student, found Man.
D. Do not use extends to make subclass..
Hướng dẫn
Chọn B là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là: Có lỗi biên dịch: Incompatible type, required Man, found Student.
Vì: m thuộc kiểu Man, nên có thể chứa pointer tới đối tượng của lớp Man. Không chứa được pointer tới đối tượng của lớp Student.
class Student {
public String sayHello() {
return “Student”;
}
}
public class Man extends Student {
public int sayHello() {
return 0;
}
}
Đoạn mã sau có lỗi biên dịch nào? Chọn một câu trả lời
A. Có lỗi biên dịch:sayHello() in Man cannot override sayHello() in Student return type int is not compatible with java.lang.String
B. Không có lỗi biên dịch.
C. Có lỗi biên dịch:sayHello() in Man cannot override sayHello() in Student because it is final
D. Có lỗi biên dịch:sayHello() in Man and in Student has the same access modifier
Hướng dẫn
Chọn A là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là: Có lỗi biên dịch:sayHello() in Man cannot override sayHello() in Student return type int is not compatible with java.lang.String
Vì:
Lớp Man định viết đè sayHello() được viết ở Student, nhưng có kiểu dữ liệu trả về là int không thể chuyển thành String được.
Và sayHello() không được đánh dấu là final, nên có thể được ghi đè.
sayHello() ở cả hai lớp đều có cùng access modifier, điều này là hợp lệ.
class Student {}
public class Man extends Student {
public boolean isMan() {
return true;
}
}
Đoạn mã sau có lỗi biên dịch KHÔNG? Nếu có là lỗi nào sau?
A. Không có lỗi biên dịch.
B. Có lỗi biên dịch:class Student is empty.
C. Có lỗi biên dịch:class Man has no constructor.
D. Có lỗi biên dịch:class Student is empty, class Man has no constructor.
Hướng dẫn
Chọn A là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là: Không có lỗi biên dịch.
Vì:
Chúng ta có thể khai báo các lớp không có thuộc tính và phương thức trống(empty).
Khi một lớp không có constructor, trình biên dịch sẽ tự động thêm vào một constructor mặc định.Vậy đoạn mã đã cho không có lỗi biên dịch nào.
class Student {
public String sayHello() {
return “Student”;
}
}
public class Man extends Student {
public String sayHello() {
return “man”;
}
public static void main(String[] args) {
Man m = new Student();
System.out.println(m.sayHello());
}
}
Đoạn mã sau có lỗi biên dịch nào?
A. Có lỗi biên dịch:Incompatible type, requiered Man, found Student.
B. Không có lỗi biên dịch. In ra màn hình “man”
C. Có lỗi biên dịch:access modified of sayHello in Student and Man are different
D. Không có lỗi biên dịch. In ra màn hình “student”
Hướng dẫn
Chọn A là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là: Có lỗi biên dịch:Incompatible type, requiered Man, found Student.
Vì:
m thuộc lớp Man, nhưng lại dùng để trỏ đển đối tượng của Student mà Man không phải là lớp con của Student.
Và access modified của cùng phương thức ở lớp con chỉ cần mạnh hơn hoặc bằng cảu lớp cha la được.
class Student {
public int getAge() {
return 10;
}
}
public class Man extends Student {
protected int getAge(int added) {
return super.getAge() + added;
}
}
Đoạn mã sau có lỗi biên dịch nào?
A. Không có lỗi biên dịch.
B. Có lỗi biên dịch: getAge() has in Man can not have weaker same access modifier than in Student.
C. Có lỗi biên dịch:call to super, must be the first in constructor in class Man.
D. Có lỗi biên dịch: getAge() in Student and Man can not have the same access arguments.
Hướng dẫn
Chọn A là đáp án đúng
Xem lời giải
Xem lời giải
Không có lỗi biên dịch.
Vì:
getAge() ở Student và Man có arguments khác nhau, nên chúng là các phương thức khác nhau.
class Student {
public String sayHello() {
return “Student”;
}
}
public class Man extends Student {
public String sayHello() {
return super.sayHello();
}
public static void main(String[] args) {
Student m = new Student();
System.out.println(m.sayHello());
}
}
Đoạn mã sau in ra màn hình xâu ký tự nào sau:
A. Student
B. Man
C. Student Man
D. Man Student
Hướng dẫn
Chọn B là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là: Student
Vì:
s là đối tượng của Student, nên phương thức được gọi là của Student.
class Student {
public int getAge() {
return 10;
}
}
public class Man extends Student {
public int getAge(int added) {
return super.getAge() + added;
}
public static void main(String[] args) {
Man s = new Man();
System.out.println(s.getAge());
System.out.println(s.getAge());
}
}
Hãy cho biết kết quả khi chạy đoạn chương trình sau?
A. 10
11
B. 10
10
C. 11
11
D. Không in gì và báo lỗi
Hướng dẫn
Chọn B là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là: Không có lỗi biên dịch. In ra 10
10
Vì:
+ Lệnh đầu tiên trong hàm main() sẽ sinh ra đối tượng s từ lớp Man.
+ Lệnh thứ 2 của hàm main sẽ gọi phương thức getAge() của đối tượng s, tuy nhiên s kế thừa từ lớp Student do đó sẽ triệu gọi phương thức getAge của lớp Student => in ra 10
+ Lệnh thứ 3 của hàm main() sẽ gọi phương thức getAge() của đối tượng s => gọi đến phương thức getAge() của lớp Student => in ra 10
Class Student
{
Public String name;
}
G/s đã khai báo lớp Student như sau. Đâu là cách tạo lớp Man là lớp con của Student?
A. public class Man extends Student{
}
B. public class Man extend Student{
}
C. public class Man :Student{
}
D. public class Man => Student{
}
Hướng dẫn
Chọn A là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là:
class Student {
public String name;
}
public class Man extends Student {
}
Vì:
Theo cú pháp khai báo lớp kế thừa trong java, từ khóa extends được dùng để mô tả một lớp là lớp con của lớp khác.
class Student {}
public class Man extends Student {
public boolean isMan() {
return true;
}
}
Đoạn mã sau có lỗi biên dịch KHÔNG? Nếu có là lỗi nào sau?
A. Không có lỗi biên dịch.
B. Có lỗi biên dịch:class Student is empty.
C. Có lỗi biên dịch:class Man has no constructor.
D. Có lỗi biên dịch:class Student is empty, class Man has no constructor.
Hướng dẫn
Chọn A là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là: Không có lỗi biên dịch.
Vì:
Chúng ta có thể khai báo các lớp không có thuộc tính và phương thức trống(empty).
Khi một lớp không có constructor, trình biên dịch sẽ tự động thêm vào một constructor mặc định.Vậy đoạn mã đã cho không có lỗi biên dịch nào.
class Student {
String sayHello() {
return “Student”;
}
}
public class Man extends Student {
protected String sayHello() {
return “man”;
}
public static void main(String[] args) {
Student s = new Man();
System.out.println(s.sayHello());
}
}
Đoạn mã sau có lỗi biên dịch KHÔNG? Nêu KHÔNG thì in ra màn hình kết quả nào?
A. Có lỗi biên dịch.
B. Student
C. Man
D. Student Man
Hướng dẫn
Chọn A là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là: Có lỗi biên dịch.
Vì:
phương thức sayHello() có mức truy xuất ở lớp Student là default, nhưng ở lớp con(Man) lại có mức truy xuất yếu hơn(Không cho phép điều này).
class Student {}
public class Man extends Student {
}
Đoạn mã sau có lỗi biên dịch không? Nếu có là lỗi nào sau?
A. Không có lỗi biên dịch.
B. Có lỗi biên dịch:class Student is empty.
C. Có lỗi biên dịch:class Man is empty.
D. Có lỗi biên dịch:class Student is empty, class Man is empty.
Hướng dẫn
Chọn A là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là: Không có lỗi biên dịch.
Vì:
Chúng ta có thể khai báo các lớp không có thuộc tính và phương thức trống(empty). Nên đáp án A đúng và D, C, D sai.
class Student {
public int getAge() {
return 10;
}
}
public class Man extends Student {
public int getAge(int added) {
return super.getAge() + added;
}
public static void main(String[] args) {
Man s = new Man();
System.out.println(s.getAge());
System.out.println(s.getAge());
}
}
Hãy cho biết kết quả khi chạy đoạn chương trình sau?
A. 10
11
B. 10
10
C. 11
11
D. Không in gì và báo lỗi
Hướng dẫn
Chọn B là đáp án đúng
Xem lời giải
Xem lời giải
Không có lỗi biên dịch. In ra 10
10
Vì:
+ Lệnh đầu tiên trong hàm main() sẽ sinh ra đối tượng s từ lớp Man.
+ Lệnh thứ 2 của hàm main sẽ gọi phương thức getAge() của đối tượng s, tuy nhiên s kế thừa từ lớp Student do đó sẽ triệu gọi phương thức getAge của lớp Student => in ra 10
+ Lệnh thứ 3 của hàm main() sẽ gọi phương thức getAge() của đối tượng s => gọi đến phương thức getAge()
class Student {
public String name;
}
public class Man extends Student {
private String name;
}
Đoạn mã sau có lỗi biên dịch nào?
A. Có lỗi biên dịch:name has private access in Man.
B. Không có lỗi biên dịch.
C. Có lỗi biên dịch:for name access modifier in Man for name is weaker in Student.
D. Có lỗi biên dịch:name has public access in Student.
Hướng dẫn
Chọn B là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là: Không có lỗi biên dịch.
Vì:
Thuộc tính không có ràng buộc về access modifier ở lớp con và lớp cha.Và thuộc tính ở mỗi lớp có thể nhận default, protected, private, public là access modified
class Student {
protected String name;
}
public class Man extends Student {
public static void main(String[] args) {
Man m = new Man();
m.name = “John”;
}
}
Đoạn mã sau có lỗi biên dịch nào sau?
A. name has protected access in Student.
B. Không có lỗi biên dịch
C. class Man has no attribute name.
D. class Man has no attribute or method name.
Hướng dẫn
Chọn B là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là: Không có lỗi biên dịch.
Vì:
Thuộc tính name ở Student là protected, nên không lớp con Man được thừa kế.
class Student {
private String name;
}
public class Man extends Student {
private String name;
public static void main(String[] args) {
Student m = new Student();
m.name = “Peter”;
}
}
Đoạn mã sau có kết quả như thế nào?
A. Có lỗi biên dịch:name has private access in Student.
B. Không có lỗi biên dịch.
C. In ra chữ “student”
D. In ra chữ “Peter”
Hướng dẫn
Chọn A là đáp án đúng
Xem lời giải
Xem lời giải
Đáp án đúng là: Có lỗi biên dịch:name has private access in Student.
Vì:
+ Không thể truy xuất vào thuộc tính private từ bên ngoài lớp
Tham khảo: Giáo trình: [1] mục 5.2