7がbyteの範囲に収まるのはコンパイル時に明らかなので、
3行目はコンパイラの判断で byte b = (byte)7; と解釈される。
確かに4行目もオーバーフローしないのはコンパイル時に明らかなんだけど、そこまでは面倒見てくれない。