Surely the method should take the amount as an argument and be called on the Account object.
Would you have a static penalty amount in the Account class; different subclasses can have different penalties? That would make the penalty the same for all instance of a particular type of account.
The static method is declared in class A so it uses the field in class A. Remember things static are not polymorphic. Their values are statically linked before run‑time. Things polymorphic (=instance methods) are linked dynamically at run‑time. I think it is because of static linking that they chose the keyword static.
then we cannot have static penalty amount in the Account class so that different subclasses can have different penalties because we defining all methods (deposit, withdraw etc)
or call (penalty or interest etc) from account class itself so it always uses value from the parent not subclasses.
because like Penalty , minimum balance is also variable. Each type of account having different minimum balance. Say Saving type of account have 504 minimum
but the Salary account have 0 minimum balance etc. (Actually in real life i am having both type of accounts and they have same amount of minimum balance)
It might help you see the different possibilities for organizing your code and concepts if you read through this article and Fowler's examples. One of the more interesting things about these patterns is that some things that you may think should be implemented as attributes of an object can actually be treated as "rules". For example, a minimum balance rule can be applied to some types of accounts, applied differently for others, and perhaps not at all for some.