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ỉ
Bài liên quan
lỗi ở dòng nào thế bạn, ban thử comment dòng gọi setSalary xem còn lỗi ko ?
stackoverflow.com
với những thông tin bạn đưa ra mình chỉ có thể cho bạn link này =))
What does a "Cannot find symbol" compilation error mean?
đây b ơi
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:
https://techblog.vn
((Employee)ps[1]).setSalary(9.9);
Đọc thêm về Upcasting tại đây:
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...
mình tưởng đây là tính đa hình của java mà
Đúng, tính đa hình chính là thứ giúp bạn add
Employee
hayManager
vàoPerson[]
. 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ảiUpcasting
thanks bạn
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
Đúng rồi bạn ạ Hoặc là bạn có thể thử cách sau
Cách đó thì bạn sẽ chỉ phải Upcasting 1 lần thôi, nhưng sẽ tốn thêm bộ nhớ