How would you model a banking transaction using object-oriented programming concepts such as classes, inheritance, polymorphism, and encapsulation?