Professional Documents
Culture Documents
btvn
btvn
class Msg {
public Msg() {
System.out.println("Hello");
}
public void sayGoodbye() {
System.out.println("Goodbye");
}}
class TestMsg extends Msg {
public TestMsg() {
super();
System.out.println("Hello Java");
}
public void sayGoodbye() {
System.out.println("Goodbye Java");
}
}
public class Demo {
public static void main(String args[]) {
Msg m1 = new Msg();
Msg m2 = new TestMsg();
m1.sayGoodbye();
m2.sayGoodbye();
}
}
Lỗi sai: class Msg không có constructor có đối để truyền tham số Msg(“OOP”)
TestMsg m2 = new Msg(); biến kiểu TestMsg không thể tham chiếu đến
đối tượng lớp cha
Bài 14:
Hãy chỉ ra lỗi sai của đoạn chương trình sau:
interface Action{
public void drive(){};
public void stop(){};
}
class Vehicle implements Action{
private int id;
public void Vehicle(int id){
this.id = id;
System.out.println("Hello world");
}
}
public class Demo {public static void main(String args[]){
Vehicle m = new Vehicle ();
}
}
Lỗi: định nghĩa phương thức interface sai, không có cặp dấu {}
Constructor không khai báo kiểu trả về, dùng void là sai
New Vehicle() chưa được truyền đối số
Bài 15:
Hãy chỉ ra lỗi sai của đoạn chương trình sau:
interface Action{
public void drive();
public void stop();
}
class Vehicle implements Action{
private int id;
public void Vehicle(int id){
this.id = id;
System.out.println("Hello world");
}
public void drive(){
System.out.println("I’m driving");
}
}
public class Demo {
public static void main(String args[]){
Vehicle m = new Vehicle ();
m.drive();
m.stop();
}
}
Lỗi: Constructor không được khai báo kiểu trả về, void là sai
New Vehicle() chưa được truyền đối số
Phương thức stop() chưa được override
Bài 16: Hãy cho biết kết quả (và lý do) của đoạn chương trình sau:
public class FileDemo{
public static void method1(File f1) {
String contents[] = f1.list();
for (int i=0; i< contents.length; i++){
System.out.println(contents[i] + "\n");
}
}
public static void main(String[] args){ method1
(new File("D:\\Documents\\utt"));
}
}
Kết quả: trả về tên các file con trong thư mục đường dẫn trên
Giải thích: phương thức method1() được gọi tryền vào đường dẫn thư mục,
phương thức list() của class File trả về mảng chứa tên các file con lưu vào
contents và for() để in tên các file ra
Bài 17:
Giải thích ý nghĩa và chỉ ra lỗi sai (giải thích) trong đoạn chương trình
sau:
interface ActionListener{
actionPerformed(ActionEvent e); }
class MyForm extends Frame implements ActionListener{
public MyForm(String title){
super(title);
setSize(300, 200);
setVisible(true);
}
}
super() để gọi các thành phần của class cha của đối tượng hiện tại
this để tham chiếu các đối tượng như thuộc tính, phương thức
Lỗi: thuộc tính name phải là protected để phương thức display() trong class
ThiSinhA có thể sử dụng
Bài 19:
Cho đoạn chương trình sau:public class Demo {
public static void main(String args[]) {
int value;
try
{
value = Integer.parseInt(args[0]);
System.out.println(“value = “ + value);
}
catch(NumberFormatException ex)
{
ex.printStackTrace();
}
}
}
Hãy giải thích ý nghĩa của try – catch trong đoạn chương trình trên. Cho biết
kết quả nếu thực thi chương trình trên nếu args[0] = “10” và trường hợp args[0] =
“A10”.
Giải thích: khối lệnh có thể gậy ngoại lệ nằm trong try, catch sẽ xử lý nếu ngoại
lệ xảy ra. Ở đây catch đang bắt lỗi NumberFormat là chuyển một chuỗi không
phải số sang int
Nên nếu args[0] = “10” sẽ in ra value = 10
args[0] = “A10” sẽ thông báo ngoại lệ vì đây không phải số, không
chuyển sang int được
Bài 20:
Giả sử lớp Shape và Point được hiện thực như ở dưới. Phát biểu Point p = new
Point(5,5); sẽ in ra màn hình nội dung gì? Giải thích.
class Shape {
public Shape() {
draw();
}
public void draw() {}
}
class Point extends Shape {
protected int x, y;
public Point(int xx, int yy) {
x = xx; y = yy;
}
public void draw() {
System.out.println("(" + x + "," + y + ")");
}
}
Kết quả: (0, 0) vì khi constructor Point được gọi, các phương thức Shape được
thực hiện nhưng lại gọi draw() của Point nên Point() chưa được khởi tạo nên sẽ
có giá trị mặc định
Bài 21:
Chương trình dưới đây sẽ in ra màn hình nội dung gì? Giải thích.
class Base {
private void f() { System.out.println("base f()"); }
public void show() { f(); }
}
public class Derived extends Base {
public void f() {
System.out.println("derived f()");
}
public static void main(String[] args) { Derived d = new Derived();
Base b = d;
b.show();
d.show();
}
}
Giải thích: do p1, p2 cùng tham chiếu đối tượng Person nên khi
setName(“Dory”) thực hiện sẽ thay đổi thuộc tính name cả hai nên khi gọi
phương thức print() của p1,p2 sẽ đều in ra “Dory”
Kết quả: Dory
Dory
Bài 23:
Chương trình dưới đây sẽ in ra màn hình nội dung gì? Giải thích.
class Base {
private void f() { System.out.println("base f()"); }
public void show() { f(); }
}
public class Derived extends Base {
public void f() {
System.out.println("derived f()");
}
public static void main(String[] args) { Derived d = new Derived();
Base b = d;
b.show();
d.show();
}
}
Bài 25:
Giả sử lớp Person và phương thức main() được cài đặt như sau
pubic class Person{
private String name;
public Person(String n){
name=n;
}
public void setName(String n){
name=n;
}
public void print(){
System.out.println(name);
}
}
public static void main(String[] args){
Person p1=new Person(“Nemo”);
Person p2=p1;
p1.setName(“Dory”);
p1.print();
p2.print();
}
Hãy cho biết nội dung gì sẽ được in ra màn hình. Giải thích.
Giải thích: do p1, p2 cùng tham chiếu đối tượng Person nên khi
setName(“Dory”) thực hiện sẽ thay đổi thuộc tính name cả hai nên khi gọi
phương thức print() của p1,p2 sẽ đều in ra “Dory”
Kết quả: Dory
Dory
Bài 26:
Cho cây kế thừa như hình vẽ:
Shape
public void draw()
Circle Rectangle
public void draw() public void draw()
Square
public void draw()
Giả sử có phương thức boolean compare(Shape s1, Shape s2).
Gọi compare(c1,c2) với c1, c2 là hai tham chiếu đến hai đối tượng
thuộc lớp Circle có được hay không? Giải thích.
Bài 28:
Cho cây kế thừa như hình vẽ:
Shape
public void draw()
Circle Rectangle
public void draw() public void draw()
Square
public void draw()
Giả sử có phương thức show(Shape s) được cài đặt và sử dụng như ở dướivoid
show(Shape s){
s.draw();
}
Shape c=new Circle();
show(c);
Phương thức draw() được cài đặt trong lớp nào sẽ được gọi. Giải thích.
Giải thích: draw() trong Circle sẽ được gọi do c tuy kiểu Shape nhưng tham
chiếu tới đối tượng Circle mà draw trong Circle đã được override nên sẽ gọi đến
draw() của Circle
Bài 29:
Giả sử lớp Shape và Point được hiện thực như ở dưới. Phát biểu Point p = new
Point(5,5); sẽ in ra màn hình nội dung gì? Giải thích.
class Shape {
public Shape() {
draw();
}
public void draw() {}
}
class Point extends Shape {
protected int x, y;
public Point(int xx, int yy) {
x = xx; y = yy;
}
public void draw() {
System.out.println("(" + x + "," + y + ")");
}
Kết quả: (0, 0) vì khi constructor Point được gọi, các phương thức Shape được
thực hiện nhưng lại gọi draw() của Point nên Point() chưa được khởi tạo nên sẽ
có giá trị mặc định
Bài 30:
Định nghĩa 02 giao diện (interface) và 01 lớp cài đặt cả 2 giao diện đấy. Giải thích.
public interface Drawable {
void draw();
}
public interface Resizable {
void resize(int percent);
}
public class Shape implements Drawable, Resizable {
@Override
public void draw() {
System.out.println("Drawing a shape");
}
@Override
public void resize(int percent) {
System.out.println("Resizing shape by " + percent + "%");
}
}
Giải thích: 2 interface khai báo nguyên mẫu draw() của Drawable và resize() của
Resizable, class Shape cài đặt sẽ định nghĩa cho 2 phương thức trên của
interface
Bài 31:
Cho ví dụ để phân biệt quan hệ is-a và has-a. Giải thích.
class Shape {
}
class Circle extends Shape {
}
Quan hệ is-a chỉ mối quan hệ kế thừa như ví dụ trên Circle kế thừa Shape
Circle “is-a” Shape
Bài 32:
Hãy chỉ ra lỗi sai của đoạn chương trình sau. Giải thích.
class MyDate {
int year, month, day;
public MyDate(int y, int m, int d) {
year = y; month = m; day = d;
}
public void copyTo(final MyDate d) {
d.year = year;
d.month = month;
d.day = day;
d = new MyDate(year, month, day);
}...
}
Giải thích: do d được khai báo final là một hằng không thể đổi mà dòng new MyDate()
đang gán d thành một đối tượng khác nên sẽ lỗi. Có thể xóa dòng dưới đây hoặc không
khai báo d là final nữa
d = new MyDate(year, month, day);
Bài 33:
Hãy chỉ ra lỗi sai của đoạn chương trình sau. Giải thích.
class Bike {
final int speedlimit = 90;//bien final
void run() {
speedlimit = 400;
}
public static void main(String args[]) {
Bike obj = new Bike();
obj.run();
}
}
Giải thích: run() được gọi để gán lại speedlimit = 400 nhưng speedlimit đang là final
nên sẽ lỗi
Bài 34:
Hãy chỉ ra lỗi sai của đoạn chương trình sau. Giải thích.
class Bike {
final void run() {
System.out.println("running");
}
}
class Honda extends Bike {
void run() {
System.out.println("Chay an toan voi 100kmph");
}
public static void main(String args[]) {
Honda honda = new Honda();
honda.run();
}
}
Giải thích: run() trong Honda đang override lại run() của Bike nhưng run() của Bike là
final nên không thể ghi đè lại
Bài 35:
Hãy chỉ ra lỗi sai của đoạn chương trình sau, giải thích?
class Parent {
public void doSomething() {}
private int doSomething2() {
return 0;
}
}
class Child extends Parent {
protected void doSomething() {}
private void doSomething2() {}
}
Giải thích: Child đang override lại doSomething2() của Parent nhưng phương
này ở class cha là private nên không thể ghi đè lại ở class ngoài Parent và kiểu
dữ liệu trả về cũng phải giống so với class cha.
Child đang override lại doSomething() nhưng phạm vi truy cập đang nhỏ hơn
class Parent, theo quy tắc ghi đè là phải bằng hoặc lớn hơn
Bài 36:
Hãy chỉ ra lỗi sai của đoạn chương trình sau, giải thích?
class Parent {
public void doSomething() {}
private int doSomething2() {
return 0;
}
}
class Child extends Parent {
protected void doSomething() {}
private void doSomething2() {}
}
Giải thích: Child đang override lại doSomething2() của Parent nhưng phương
này ở class cha là private nên không thể ghi đè lại ở class ngoài Parent và kiểu
dữ liệu trả về cũng phải giống so với class cha.
Child đang override lại doSomething() nhưng phạm vi truy cập đang nhỏ hơn
class Parent, theo quy tắc ghi đè là phải bằng hoặc lớn hơn
Bài 37:
Hãy cho biết kết quả (và lý do) của đoạn chương trình sau:
class Point {
protected int x, y;
public Point() {
System.out.println("Point constructor");
}
}
class Circle extends Point {
protected int radius;
public Circle() {
System.out.println("Circle constructor");
}
public static void main(String[] args){
Circle c = new Circle();
}}