在我这个没写过 Java 项目的外行看来,面向接口编程应该是没什么问题的,准确来说是面向抽象编程,但并不是所有东西都需要抽象,以“考虑未来 /拓展”为理由产生的过度抽象是应该避免的。
关于 Getter/Setter:同 56 楼,是面向对象保持封装性的一部分,但是我个人认为如果你开发的是一个类似 Spring 这样需要一步步发展完善的大型工程项目,那封装是很重要的,反之如果只是写简单的业务逻辑,以后很可能整个 Model 都推翻重来,也不会有人在你这个项目之上再去拓展(感觉一般的 Web 项目模型都不会再作为其他项目的基础了),那么对于不需要限制修改的属性,完全可以写成 public 的。
其他内存问题我不了解,不过直觉多一个 JVM ,不管怎么都不可能和直接在对应平台上编译效果一样吧。