Question: Liskov substitution principle:
B is a subtype of A iff anything one can do with A one can do with B.
So why is Null a subtype of all classes in Scala even though by the above definition it isn't a subtype of any class? Couldn't Null have been defined as implementing all possible methods, each returning null? What are the reasons Null was defined the way it is in Scala?

Answer: 
Null is pretty much unavoidable on the JVM. References can be null. Scala can't stop that.

All Scala did was include Java's null into the unified type system. It exists for Java interop, nothing more. Null was wrong in Java, and it's also wrong in Scala.

Yes, null references are the ultimate LSP violation. No, there's no way to fix that. Evaluating method invocations on null to `null` instead of to throwing `NullPointerException` wouldn't be any more or less correct, just equally nonsensical.

There's really nothing interesting to see here. Wrap anything nullable in `Option(...)`, forget about this dark pit of incorrectness, and move on.
> 
> Couldn't Null have been defined as implementing all possible methods, each returning null? 
> 
> 
> 

No. 1. Methods returning primitive types can't return null; 2. the only reason Scala has `null` is because JVM has it; and the JVM `null` doesn't behave this way. This would require basically adding an `if` before *every* method call unless the compiler can *prove* the receiver isn't null, which it normally can't.