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