class “con người”
abstract class Human
// lớp trừu tượng hay không cũng không quan trọng, đều có thể xây dựng Contructor.
//Nếu là lớp trừu tượng thì không được gọi trực tiếp
//mà chỉ dùng để super() trong các lớp con.
{
String Name;
int Born;
public Human(String name, int born)
{
Name = name;
Born = born;
}
}
class "giáo viên:
class Teacher extends Human
{
String[] Classes;
public Teacher(String name, int born, String[] classes)
{
super(name, born);
if (classes != null)
{
Classes = new String[classes.length];
for (int i = 0; i < Classes.length; i += 1)
Classes[i] = classes[i];
}
}
}
class "học sinh:
class Student extends Human
{
String Class;
public Student(String name, int born, String _class)
{
super(name, born);
Class = _class;
}
}
Trong căn phòng này có 60 người
Human[] humans = new Human[60];
Người thứ nhất là giáo viên, 59 người còn lại là học sinh
humans[0] = new Teacher("Trần Hoàn", 1995, null);//Coi như thằng này không dạy lớp nào cả
Vì humans có kiểu dữ liệu là Human[] nên human[0] có kiểu dữ liệu là Human, dòng trên tương đương với
Human a = new Teacher("Trần Hoàn", 1995, null);
humans[0] = a;
Và các học sinh:
for (int i = 1; i < 60; i += 1)
humans[i] = new Student("noz1995", 2000, "12A");
//Coi như 59 thằng đều tên là "noz1995", sinh năm 2000 và học lớp "12A"
Như vậy, biến (reference, con trỏ) humans[i] có kiểu dữ liệu là Human dù đối tượng mà human[i] trỏ vào có thể có kiểu Teacher hoặc Student
Khi muốn biết người thứ 3 sinh năm bao nhiêu:
return Human[2].Born;
Khi muốn biết người thứ 3 học lớp nào, vì humans[2] có kiểu dữ liệu là Human không có field Class nên phải ép kiểu:
return ((Student)humans[2]).Class;
//Nếu thằng này không phải là Student thì IDE không báo lỗi, nhưng khi chạy đến dòng này sẽ bị Exception.