package baihoc.truutuongvadahinh;
abstract class Animal{
int id;
String name;
float age;
abstract void move(); //khai báo phương thức trừu tượng
}
class Cat extends Animal{
@Override
void move() {
System.out.println("Run");
}
}
class Bird extends Animal{
@Override
void move() {
System.out.println("Fly");
}
}
class Fish extends Animal{
@Override
void move() {
System.out.println("Swim");
}
}
class Calculate{
double add(float a,float b){
return a+b;
}
double add(float a,float b,float c){
return a+b+c;
}
}
public class TruuTuongVaDaHinh {
//Trừu tượng (Abstract): Dùng cho phương thức (hành vi) trong trường hợp phương thức hay hành vi
//đó không hoặc khó cụ thể hóa được.
//Thay vì định nghĩa phương thức (hành vi) thì ta khai báo nó sử dụng từ khóa abstract.
//Khi đó lớp chứa phương thức trừu tượng cũng phải là lớp trừu tượng, nghĩa là cũng phải dùng
//từ khóa abstract cho lớp đó.
//Lớp trừu tượng thì không có đối tượng tương ứng, nói cách khác không tạo được đối tượng từ
//lớp trừu tượng.
//Lưu ý: Lớp trừu tượng chứa được cả phương thức trừu tượng và phương thức không trừu tượng.
//Lớp trừu tượng cho phép các lớp khác thừa kế, nhưng phải thực thi (cụ thể hóa) các phương
//thức trừu tượng của lớp trừu tượng.
//Ví dụ:
//Đa hình (Polymorphism): Là kỹ thuật cho phép một đối tượng có thể thể hiện ở nhiều dạng khác
//nhau, một hành vi có thể được thể hiện ở nhiều kiểu khác nhau.
//Ví dụ:
public static void main(String[] args) {
double d=30;
float f=40;
int i=50;
// d=f;
// d=i;
// f=d;//error
// i=d;//error
Animal ani=new Cat();//Tạo 1 đối tượng Cat rồi gán cho biến có kiểu Animal
Cat cat=new Cat();
}
}