30/09/2018, 22:07
Phạm vi truy cập trong Java
e có 1 package là nguoidung, trong package này có 2 class:
// class NguoiDung
package nguoidung;
import java.util.Scanner;
public class NguoiDung{
static NguoiDung nd = new NguoiDung();
public void init(){
Scanner sc = new Scanner(System.in);
System.out.println("Nhap ngay: ");
nd.setNgay(sc.nextLine());
System.out.println("Nhap ngay: ");
System.out.println("Nhap ngay: ");
System.out.println("Nhap ngay: ");
}
}
// class Ngay
package nguoidung;
public class Ngay {
private String ngay;
public void setNgay(String ngay){
this.ngay = ngay;
}
public String getNgay(){
return this.ngay;
}
}
cho e hỏi là: trong class NguoiDung, tại hàm init(), e gọi đến phương thức setNgay(), thì nó lại báo lỗi.
có phải là do khai báo sai phạm vi truy cập không ạ ?
theo e thì hàm setNgay() strong class Ngay đã để là public, thì do 2 class này trong cùng package thì trong class NguoiDung cũng có thể dùng được hàm setNgay() chứ nhỉ ?
Bài liên quan
Theo mình thì bạn không thể gọi trực tiếp phương thức từ lớp này sáng lớp khác, muốn gọi phương thức thì phải thông qua đối tượng của phương thức đó.
Giống như bạn muốn gọi phương thức setNgay từ lớp Nguoi trong phương thức Init() thì trong Init phải khởi tạo đối tượng của Ngay vd:
Ngay ngay = new Ngay(); ngay.setNgay();
Chi tiết: http://o7planning.org/vi/10319/access-modifier-trong-java
nd là instance của NguoiDung chứ có phải là của Ngay đâu, lỗi là phải rồi
Đơn giản là do phương thức
setNgay(String ngay)
nó là của class Ngay thì làm sao mà đối tượng NguoiDung gọi như vậy được chứ bạn.@nguyenhuuca @xuho95 vậy làm sao để sử dụng được phương thức setNgay() trong class NguoiDung vậy các bác ?
Bạn có thể thêm 1 thuộc tính
ngaySinh
là instance của class Ngay trong class NguoiDung là được.ok b, thông qua VD e cũng đã hiểu thêm phần nào về access modier, cảm ơn b nhiều nhé
Hey. Chào bạn. Theo mình biết vấn đề của bạn không hiểu ở đây là cách sử dụng object và class. Không liên quan đến access modifier bạn nhé. 1 lớp là tập hợp những trạng thái và hành vi chung của 1 tập các đối tượng nào đấy. 1 đối tượng là thực thể cụ thể của 1 lớp, vì vậy nó chứa các copy trạng thái và hành vi của lớp chứa nó. Nên phạm vi truy cập của 1 đối tượng là các phương thức và các biến toàn cục trong lớp nó được định nghĩa. Trong trường hợp của bạn, bạn sử dụng đối tượng của lớp NguoiDung truy xuất vào phương thức setNgay của lớp Ngay. Như vậy là vi phạm quy tắc nhé. Xa hơn nữa bạn sẽ được học tính kế thừa, thì với cách truy cập của bạn sẽ được chấp nhận nhé. Khi bạn sử dụng các access moidifier và static hãy tìm hiểu trước khi sử dụng bọn nó nhé, nếu không sẽ xảy ra những lỗi không lường được.
Cái này bạn nên học lại về kiến thứ OOP và Access modifier là hiểu thôi.