01/10/2018, 16:38

Khởi tạo đối tượng trong java

Mọi người cho em hỏi cách hiểu của mọi người về khởi tạo đối tượng trong java với ạ. Theo em thì cách khởi tạo là: kiểu dữ liệu tên đối tượng = new Constructor:
kiểu dữ liệu Có thể là tên lớp hoặc tên interface mà lớp chứa constructor implement, kiểu dữ liệu tham chiếu đối tượng( vd: String, Array, etc)
constructor chỉ có thể là tên lớp, nó là phương thức đặc biệt của lớp chứa nó.
VD:
NewClass extend MainClass
MainClass d = new NewClass(id)
d.hamMainClass(); // Hàm này thuộc MainClass thì vẫn dùng bình thường
d.getId(); // Hàm này thuộc NewClass thì không dùng được. Chương trình báo lỗi

Vậy cái phần NewClass(id) có tác dụng gì ạ. Đối tượng d lại không dùng được các phương thức trong lớp NewClass

Nguyễn Đình Anh viết 18:47 ngày 01/10/2018

Bạn có thể show hết MainClass và NewClass lên được không ?

Nguyen Kien viết 18:51 ngày 01/10/2018

Mình nghĩ cú pháp chỉ là thứ hiện thực hóa suy nghĩ của mình thôi
vd: con thừa hưởng những đặc điểm hành vi từ bố thì những hành vi con có chắc gì bố đã có đấy => mơ hồ => sai lầm

At Phong viết 18:46 ngày 01/10/2018

public class NewClass extends MainClass{
private int id;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public static void main(String[] args){
    MainClass d = new NewClass();
    d.traVe();
}

}
class MainClass {

public void traVe(){
    System.out.println("not me");
}

}

Tao Không Ngu. viết 18:39 ngày 01/10/2018

Hi At Phong.

  1. Bạn cần học lại lý thuyết về OOP.
  2. MainClass d = new NewClass(id) khi đó biến d có kiểu là MainClass và nó chỉ có các phương thức của MainClass.
  3. NewClass(id) có tác dụng gì : Tính đa hình. Khi bạn gọi các phương thức bị ghi đè bở lớp con thì nó sẽ thực thi các phương thức của lớp con.

P/S https://kipalog.com/posts/4-tinh-chat-dac-thu-cua-lap-trinh-huong-doi-tuong

At Phong viết 18:50 ngày 01/10/2018

Thanksssssssssss bro

Trần Hoàn viết 18:47 ngày 01/10/2018
class A
{
}
class B extends class A
{
	public void b()
	{
	}
}

Nếu bạn khai báo như sau

A x = new B();

Chương trình sẽ hiểu x có kiểu dữ liệu A, vì vậy không có phương thức b(). Để sử dụng phương thức đó, bạn phải cast

(B)x.b();

Tuy nhiên nếu như có class C cũng kế thừa AC thì có phương thức c().
Bạn có thể cast như sau:

(C)x.c();

Compiler sẽ không báo lỗi, chương trình vẫn được biên dịch bình thường, nhưng khi thực thi đến dòng đó thì chương trình sẽ bị crash, debugger sẽ quăng exception vì x có kiểu dữ liệu B nên không thể cast thành C. Thế nên trước khi cast phải biết chắc chắn mình đang làm việc với kiểu dữ liệu nào, hoặc tống hết vào try-catch cho chắc ăn.

Bài liên quan
0