Chạy hàm main, nhập vào thì được nhưng khi hiển thị ra giá trị null và 0

package baitap3;
public abstract class MatHang {
    String Mamh;
    private String Ten;
    private double dongia;
    public String getMamh(){
        return Mamh;
    }
    public String getTen(){
        return Ten;
    }
    public double getDongia(){
        return dongia;
    }
    public void setDongia(double dongia){
        this.dongia=dongia;
    }
    public void setMamh(String Mamh){
        this.Mamh=Mamh;
    }
    public void setTen(String Ten){
        this.Ten=Ten;
    }

    public MatHang() {}   
    public MatHang(String Mamh,String Ten,double dongia){
        this.Mamh=Mamh;
        this.Ten=Ten;
        this.dongia=dongia;
    }
    public abstract void  Nhap();
    public abstract void HienThi();
}



package baitap3;
import java.math.BigDecimal;
import java.util.Scanner;
public class Tivi extends MatHang {
    private String LoaiTV;
    private int ManHinh;
    static Scanner s= new Scanner(System.in);
    public String getLoaiTV(){
        return LoaiTV;
    }
    public int getManHinh(){
        return ManHinh;
    }
    public void setLoaiTV(String LoaiTV){
        this.LoaiTV=LoaiTV;
    }
    public void setManHinh(int ManHinh){
        this.ManHinh=ManHinh;
    }
    public Tivi() { }
    public Tivi(String LoaiTV,int ManHinh,String Mamh,String Ten,double dongia){
        super(Mamh, Ten, dongia);
        this.LoaiTV=LoaiTV;
        this.ManHinh=ManHinh;
    }
     @Override
   public void Nhap(){
       System.out.print("Nhap ma mat hang:");
       String Mamh=s.nextLine();
       System.out.print("Nhap Ten:");
       String Ten=s.nextLine();
       System.out.print("Nhap don gia:");
       double dongia=s.nextDouble();
       s.nextLine();
       System.out.print("Nhap loai tv:");
       String LoaiTV =s.nextLine();
       System.out.print("Nhap man hinh:");
       int ManHinh =s.nextInt();
      s.nextLine();
   }
   @Override
   public void HienThi(){
        System.out.println("Thông tin ti vi");
        System.out.println("Mã mặt hàng: "+getMamh());
        System.out.println("Tên: "+getTen());
        System.out.println("đơn giá: "+getDongia());
        System.out.println("loai ti vi:"+getLoaiTV());
        System.out.println("màn hình: "+getManHinh());
   }
    public static void main(String[] args) {
         Tivi t1= new Tivi();
         t1.Nhap();
         t1.HienThi();
    }
}

Hay lắm, lưu vào trường cục bộ, rồi bảo trường toàn cục không có giá trị.

5 Likes

các field trong method Nhap() phải là biến instance đã tạo bên trên.
ghi như bác là tạo thêm các biến local không liên quan gì đến biến instance, nên giá trị mặc định của String là null, int là 0 thì đúng rồi.
phải sửa lại như này
1

vì class Tivi kết thừa từ class MatHang nên đoạn này phải sửa modifier từ private thành protected

String Mamh;
private String Ten;
private double dongia;
protected String Mamh;
protected String Ten;
protected double dongia;

như này mới đúng !

2 Likes


Em có muốn để thế đâu các bác .Nhưng đề nó yêu cầu thế thì em chịu,

thì mình làm đúng theo đề mà ? :frowning: vấn đề là bác chưa hiểu biến local với biến instance

Sao thầy lại dạy đặt tên biến tiếng Việt thế kia, hỏng hết. :worried:

1 Like

vâng em hiểu ý của bác nhưng thày để mấy biến đấy toàn ở private nên chúng em theo thầy. Và em cũng thử để protecred chạy được rồi nhưng cái khó là trong đề thầy bắt để là private

Và em cũng tham khảo trên mạng nhiều bài thấy các bài về lớp kế thừa , lớp ảo đều để protected nhưng thầy em toàn chơi khác người thôi .Em cung khổ lắm :sob::sob::sob:

Chắc thầy thương học sinh thôi bác ạ

  • Chuyện đặt tên (lớp, trường, phương thức) Tiếng Việt thì du di (cho qua) cho bạn ấy, thầy bắt mà. :kissing_smiling_eyes:
  • Thầy yêu cầu để các trường là private là hoàn toàn đúng. Đó là lý do để tạo các phương thức get - set public tương ứng. Đây là đảm bảo tính toàn vẹn của dữ liệu, tránh bị sửa đổi không mong muốn, kể cả với các lớp con kế thừa.

Vấn đề chính của câu hỏi/các câu trả lời, bạn hiểu chưa vậy?
Bạn sửa được chưa?

1 Like

Em sửa được rồi các bác ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?