01/10/2018, 17:15

Lỗi kế thừa trong java

class Person
{
    String name;
    String birthday;

    String getName()
    {
        return name;
    }
    void setName(String ten)
    {
        name = ten;
    }
    void setBirthday(String sn)
    {
        birthday = sn;
    }
    public String toString()
    {
        String temp = "name: " + name + " ; " + " ngay sinh: " + birthday;
        return temp;
    }
}

class Employee extends Person
{
    double salary;

    double getSalary()
    {
        return salary;
    }
    void setSalary(double hesoluong)
    {
        salary = hesoluong;
    }
    public String toString()
    {
        String temp = super.toString() + " ; he so luong: " + salary;
        return temp;
    }
}

class Manager extends Employee
{
    Employee assistant;

    void setAssistant(Employee assis)
    {
        assistant = assis;
    }
    public String toString()
    {
        String temp = "asistant: " + super.toString();
        return temp;
    }
}

public class b5_page_150
{
    public static void main(String[] args)
    {
        Person[] ps = new Person[3];
        ps[0] = new Person();
        ps[1] = new Employee();
        ps[2] = new Manager();

        ps[0].setName("ruoi muoi");
        ps[0].setBirthday("26/7/1999");

        System.out.println( ps[0].toString() );

        ps[1].setName("trau bo");
        ps[1].setBirthday("2605/199x");
        ps[1].setSalary(9.9);

        System.out.println( ps[1].toString() );

    }
}

tại sao em gọi hàm setSalary thì nó báo cant not find sysbol nhỉ

Đoàn Trọng Hiếu viết 19:24 ngày 01/10/2018

lỗi ở dòng nào thế bạn, ban thử comment dòng gọi setSalary xem còn lỗi ko ?
với những thông tin bạn đưa ra mình chỉ có thể cho bạn link này =))

stackoverflow.com
Stephen C

What does a "Cannot find symbol" compilation error mean?

java, compiler-errors, cannot-find-symbol
asked by Stephen C on 01:12AM - 07 Sep 14

Trâu Gia Gia viết 19:17 ngày 01/10/2018

kethua

đây b ơi

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

Person[] ps = new Person[3];

Bạn khai báo mảng ở đây là một mảng Person nên hệ thống sẽ mặc định hiểu toàn bộ Object trong mảng là một Person. Mà Person không có void setSalary nên sẽ bị lỗi vậy đó


Cách giải quyết ở đây chính là sử dụng Upcasting: ((Employee)ps[1]).setSalary(9.9);
Đọc thêm về Upcasting tại đây:

https://techblog.vn

Upcasting and downcasting in java

Hôm nay mình xin chia sẻ một cơ chế khá hay trong java đó chính là upcasting and downcasting object, từ đó mình cũng sẽ đi sâu và chứng minh rõ việc sử dụng tính đa hình của hướng đối tương. Thêm nữa là đi phân tích mối liên quan của object reference...

Trâu Gia Gia viết 19:23 ngày 01/10/2018

mình tưởng đây là tính đa hình của java mà

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

Đúng, tính đa hình chính là thứ giúp bạn add Employee hay Manager vào Person[]. Tuy nhiên chính vì bạn get Object từ Person[] nên hệ thống mới hiểu Object được get ra là một Person Và thế chúng ta mới phải Upcasting

Trâu Gia Gia viết 19:18 ngày 01/10/2018

thanks bạn

Trâu Gia Gia viết 19:29 ngày 01/10/2018

((Employee)ps[1]).setSalary(9.9);

không có cơ chế nào làm auto hả b, nếu cứ phải ép kiểu như vậy quả là bất tiện

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

Đúng rồi bạn ạ Hoặc là bạn có thể thử cách sau

Employee emp = (Employee) ps[1];
emp.setSalary(9.9);

Cách đó thì bạn sẽ chỉ phải Upcasting 1 lần thôi, nhưng sẽ tốn thêm bộ nhớ

Bài liên quan
0