Full-stack Developer chuyên về Java Backend và JavaScript Frontend. Sẵn sàng đóng góp vào các dự án web development với kỹ năng vững chắc và tinh thần học hỏi không ngừng.
Mục lục
Mục lục
🎯 Master 4 Pillars của OOP - Encapsulation, Inheritance, Polymorphism, Abstraction - nền tảng để trở thành Java Developer chuyên nghiệp!
⭐ Foundation of Java: OOP là TRÍ TUỆ CỐT LÕI của Java - mọi framework và library đều build trên 4 nguyên lý này!
Lập trình Hướng Đối Tượng (Object-Oriented Programming - OOP) là một paradigm lập trình dựa trên khái niệm “objects” - các đối tượng chứa dữ liệu (attributes) và hành vi (methods).
graph TD
A[OOP Principles] --> B[Encapsulation]
A --> C[Inheritance]
A --> D[Polymorphism]
A --> E[Abstraction]
B --> F[Data Hiding]
C --> G[Code Reuse]
D --> H[Flexibility]
E --> I[Simplification]
style A fill:#ff6b6b
style B fill:#51cf66
style C fill:#339af0
style D fill:#ff8787
style E fill:#ffd43b
Encapsulation là việc gói gọn dữ liệu (attributes) và các phương thức (methods) thao tác trên dữ liệu đó vào trong một đơn vị duy nhất (class), đồng thời che giấu chi tiết bên trong.
publicclassBankAccount{// Private attributes - ẩn dữ liệuprivateStringaccountNumber;privatedoublebalance;privateStringownerName;// ConstructorpublicBankAccount(StringaccountNumber,StringownerName){this.accountNumber=accountNumber;this.ownerName=ownerName;this.balance=0.0;}// Public methods - interface để tương tácpublicvoiddeposit(doubleamount){if(amount>0){balance+=amount;System.out.println("Nạp tiền thành công: "+amount+" VND");}else{System.out.println("Số tiền không hợp lệ!");}}publicbooleanwithdraw(doubleamount){if(amount>0&&amount<=balance){balance-=amount;System.out.println("Rút tiền thành công: "+amount+" VND");returntrue;}else{System.out.println("Số dư không đủ hoặc số tiền không hợp lệ!");returnfalse;}}// Getter methodspublicdoublegetBalance(){returnbalance;}publicStringgetAccountNumber(){returnaccountNumber;}publicStringgetOwnerName(){returnownerName;}// Display infopublicvoiddisplayInfo(){System.out.println("=== Thông tin tài khoản ===");System.out.println("Số tài khoản: "+accountNumber);System.out.println("Chủ tài khoản: "+ownerName);System.out.println("Số dư: "+balance+" VND");}}// Sử dụngpublicclassMain{publicstaticvoidmain(String[]args){BankAccountaccount=newBankAccount("123456789","Trung Tín");account.deposit(1000000);account.withdraw(500000);account.displayInfo();// Không thể truy cập trực tiếp: account.balance = 999999; // Error!// Phải dùng methods: account.deposit(999999);}}
// Parent class (Superclass)publicclassAnimal{protectedStringname;protectedintage;publicAnimal(Stringname,intage){this.name=name;this.age=age;}publicvoideat(){System.out.println(name+" đang ăn...");}publicvoidsleep(){System.out.println(name+" đang ngủ...");}publicvoidmakeSound(){System.out.println(name+" đang kêu...");}}// Child class - Dog IS-A AnimalpublicclassDogextendsAnimal{privateStringbreed;publicDog(Stringname,intage,Stringbreed){super(name,age);// Gọi constructor của parent classthis.breed=breed;}// Override method từ parent class@OverridepublicvoidmakeSound(){System.out.println(name+" kêu: Gâu gâu!");}// Method riêng của Dogpublicvoidfetch(){System.out.println(name+" đang bắt bóng!");}}// Child class - Cat IS-A AnimalpublicclassCatextendsAnimal{privatebooleanisIndoor;publicCat(Stringname,intage,booleanisIndoor){super(name,age);this.isIndoor=isIndoor;}@OverridepublicvoidmakeSound(){System.out.println(name+" kêu: Meo meo!");}publicvoidscratch(){System.out.println(name+" đang cào!");}}// Sử dụngpublicclassMain{publicstaticvoidmain(String[]args){Dogdog=newDog("Buddy",3,"Golden Retriever");Catcat=newCat("Kitty",2,true);dog.eat();// Kế thừa từ Animaldog.makeSound();// Override methoddog.fetch();// Method riêngcat.eat();// Kế thừa từ Animalcat.makeSound();// Override methodcat.scratch();// Method riêng}}
publicclassCalculator{// Cùng tên method, khác parameterspublicintadd(inta,intb){returna+b;}publicintadd(inta,intb,intc){returna+b+c;}publicdoubleadd(doublea,doubleb){returna+b;}publicStringadd(Stringa,Stringb){returna+b;}}// Sử dụngpublicclassMain{publicstaticvoidmain(String[]args){Calculatorcalc=newCalculator();System.out.println(calc.add(5,10));// 15System.out.println(calc.add(5,10,15));// 30System.out.println(calc.add(5.5,10.5));// 16.0System.out.println(calc.add("Hello ","Java"));// Hello Java}}
publicclassShape{publicvoiddraw(){System.out.println("Vẽ hình...");}publicdoublecalculateArea(){return0;}}publicclassCircleextendsShape{privatedoubleradius;publicCircle(doubleradius){this.radius=radius;}@Overridepublicvoiddraw(){System.out.println("Vẽ hình tròn");}@OverridepublicdoublecalculateArea(){returnMath.PI*radius*radius;}}publicclassRectangleextendsShape{privatedoublewidth;privatedoubleheight;publicRectangle(doublewidth,doubleheight){this.width=width;this.height=height;}@Overridepublicvoiddraw(){System.out.println("Vẽ hình chữ nhật");}@OverridepublicdoublecalculateArea(){returnwidth*height;}}// Sử dụng - Runtime PolymorphismpublicclassMain{publicstaticvoidmain(String[]args){// Polymorphism: Parent reference, Child objectShapeshape1=newCircle(5);Shapeshape2=newRectangle(4,6);// Method được gọi dựa trên object thực tế (runtime)shape1.draw();// Vẽ hình trònSystem.out.println("Diện tích: "+shape1.calculateArea());shape2.draw();// Vẽ hình chữ nhậtSystem.out.println("Diện tích: "+shape2.calculateArea());// Array of shapesShape[]shapes={newCircle(3),newRectangle(5,4),newCircle(7)};for(Shapeshape:shapes){shape.draw();System.out.println("Diện tích: "+shape.calculateArea());}}}
// Abstract classpublicabstractclassVehicle{protectedStringbrand;protectedStringmodel;publicVehicle(Stringbrand,Stringmodel){this.brand=brand;this.model=model;}// Abstract method - phải overridepublicabstractvoidstart();publicabstractvoidstop();// Concrete method - có implementationpublicvoiddisplayInfo(){System.out.println("Brand: "+brand);System.out.println("Model: "+model);}}publicclassCarextendsVehicle{privateintnumberOfDoors;publicCar(Stringbrand,Stringmodel,intnumberOfDoors){super(brand,model);this.numberOfDoors=numberOfDoors;}@Overridepublicvoidstart(){System.out.println("Xe ô tô "+brand+" đang khởi động bằng chìa khóa...");}@Overridepublicvoidstop(){System.out.println("Xe ô tô "+brand+" đang dừng lại...");}}publicclassMotorcycleextendsVehicle{privatebooleanhasHelmet;publicMotorcycle(Stringbrand,Stringmodel,booleanhasHelmet){super(brand,model);this.hasHelmet=hasHelmet;}@Overridepublicvoidstart(){System.out.println("Xe máy "+brand+" đang khởi động bằng điện...");}@Overridepublicvoidstop(){System.out.println("Xe máy "+brand+" đang dừng lại...");}}
// InterfacepublicinterfaceFlyable{// Abstract methods (public abstract by default)voidtakeOff();voidfly();voidland();// Default method (Java 8+)defaultvoidcheckWeather(){System.out.println("Kiểm tra thời tiết trước khi bay...");}// Static method (Java 8+)staticvoiddisplayInfo(){System.out.println("Interface Flyable cho các đối tượng có thể bay");}}publicclassAirplaneimplementsFlyable{privateStringmodel;publicAirplane(Stringmodel){this.model=model;}@OverridepublicvoidtakeOff(){System.out.println("Máy bay "+model+" đang cất cánh...");}@Overridepublicvoidfly(){System.out.println("Máy bay "+model+" đang bay ở độ cao 10,000m");}@Overridepublicvoidland(){System.out.println("Máy bay "+model+" đang hạ cánh...");}}publicclassBirdimplementsFlyable{privateStringspecies;publicBird(Stringspecies){this.species=species;}@OverridepublicvoidtakeOff(){System.out.println("Chim "+species+" đang vỗ cánh cất cánh...");}@Overridepublicvoidfly(){System.out.println("Chim "+species+" đang bay tự do");}@Overridepublicvoidland(){System.out.println("Chim "+species+" đang đáp xuống cành cây...");}}// Sử dụngpublicclassMain{publicstaticvoidmain(String[]args){Flyableairplane=newAirplane("Boeing 747");Flyablebird=newBird("Đại bàng");airplane.checkWeather();airplane.takeOff();airplane.fly();airplane.land();System.out.println();bird.checkWeather();bird.takeOff();bird.fly();bird.land();Flyable.displayInfo();// Static method}}