public class SinhVien {
public static void main(String[] args) {
Cat c=new Cat("Tom",2,1);
Mouse m=new Mouse("Jerry",3);
System.out.println(""+getT(c)); //Cat
System.out.println(""+getT(m)); //Mouse
}
//Ứng dụng đa hình, truyền qua tham số
public static String getT(Animal animal) {
return animal.getAnimalName();
}
}
abstract class Animal {
// Tên, ví dụ Mèo Tom, Chuột Jerry.
private String name;
// Constructor mặc định.
public Animal() {
// Gán giá trị mặc định cho 'name'.
this.name = this.getAnimalName();
}
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// Đây là một phương thức trừu tượng.
// Trả về tên của loài động vật này.
// Nội dung cụ thể của phương thức này
// sẽ được thực hiện (implemented) tại các lớp con.
public abstract String getAnimalName();
}
class Cat extends Animal {
private int age;
private int height;
public Cat(int age, int height) {
// Gọi tới Constructor mặc định của lớp cha (Animal).
// Nhằm mục đích gán tạo giá trị cho các trường (field) của lớp cha.
super();
// Sau đó mới gán giá trị cho các trường (field) của nó.
this.age = age;
this.height = height;
}
public Cat(String name, int age, int height) {
// Gọi tới Constructor của lớp cha (Animal)
// Nhằm mục đích gán tạo giá trị cho các trường (field) của lớp cha.
super(name);
// Sau đó mới gán giá trị cho các trường (field) của nó.
this.age = age;
this.height = height;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
// Thực hiện (implement) phương thức trừu tượng được khai báo tại lớp cha.
@Override
public String getAnimalName() {
return "Cat";
}
}
class Mouse extends Animal {
private int weight;
// Constructor mặc định.
public Mouse() {
// Gọi tới cấu tử Mouse(int)
// Call to constructor Mouse(int)
this(100);
}
// Constructor có 1 tham số
public Mouse(int weight) {
// Nếu bạn không gọi bất kỳ một super(..) nào.
// Java sẽ gọi một super() mặc định.
// super();
this.weight = weight;
}
// Constructor có 2 tham số.
public Mouse(String name, int weight) {
super(name);
this.weight = weight;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
@Override
public String getAnimalName() {
return "Mouse";
}
}
class AsianCat extends Cat {
public AsianCat(String name, int age, int height) {
super(name, age, height);
}
// Ghi đè (override) phương thức của lớp cha (Cat)
@Override
public String getAnimalName() {
return "Asian Cat";
}
}
Không có nhận xét nào:
Đăng nhận xét