Tag: oop

什么是抽象类?

当我了解抽象类时,就说WT(H *)!!! 问题: 创建一个无法实例化的类有什么意义? 为什么有人想要这样的课? 抽象类成为必需的情况是什么? **如果你明白我的意思*

与构造函数同名的方法 – 为什么?

为什么允许以下内容: public class Foo { public Foo() { … } public void Foo() { … } } 是否有正当理由将方法命名为与类相同?

为什么Java中缺少friend指令?

我想知道为什么Java的设计没有C ++中提供的friend指令,以便更好地控制哪些方法和实例变量可以从已定义类的包外部获得。 我没有看到任何实际的原因或任何特定的缺点,它似乎只是一个设计问题,但如果添加到语言中不会产生任何问题。

Java中的最终接口?

可以在Java中将接口声明为final吗?

如何防止将重复对象添加到ArrayList

可能重复: 防止arraylist中的重复条目 我有一个特定class级C的arraylist。 List myList = new ArrayList(); C类有两个属性即。 String str1; String str2; 现在,当我将类型C的对象添加到ArrayList myList时,我想检查列表中是否已存在一个对象,其中str1和str2的值与对象的参数(str1和str2)的值相匹配我即将补充。 是否有任何有效的方法来做到这一点,而不必每次遍历完整列表并检查参数之间的匹配?

虚拟表/调度表

根据我所知的CPP,每个class级都有自己的vtable。 但是这个维基百科链接提到: 对象的调度表将包含对象的动态绑定方法的地址。 通过从对象的调度表中获取方法的地址来执行方法调用。 对于属于同一类的所有对象,调度表是相同的,因此通常在它们之间共享。 有人可以请一些亮点。 谢谢 !

为什么不能将Java类声明为静态?

我试图找到为什么不能将类创建为静态? 喜欢: public static class Qwert{ public static void main(String args[]){ int x = 12; while(x<12){ x–; } System.out.println(" the X value is : "+ x); } }

企业Java实体应该是愚蠢的吗?

在我们的遗留Java EE应用程序中,有大量的值对象(VO)类,它们通常只包含getter和setter,可能是equals()和hashCode() 。 这些(通常)是要在持久性存储中保存的实体。 (为了记录,我们的应用程序没有EJB – 尽管将来可能会改变 – 并且我们使用Hibernate来持久化我们的实体。)操作VO中的数据的所有业务逻辑都在不同的类中(不是EJB,只是POJO) )。 我的OO心态讨厌这个,因为我确实认为给定类的操作应该驻留在同一个类中。 所以我迫切希望将逻辑转化为相关的VO。 我刚刚与一位在Java EE方面比我更有经验的同事进行了讨论,并且他确认愚蠢的实体至少曾经是推荐的方式。 然而,他最近也阅读了有关这一立场有效性的意见。 我知道有些问题至少限制了实体类中的内容: 它不应该直接依赖于数据层(例如,查询代码应该进入单独的DAO) 如果它直接暴露于更高层或客户端(例如通过SOAP),则可能需要限制其接口 有没有更合理的理由不将逻辑移入我的实体? 还是要考虑其他任何问题?

Java封装

我们总是说如果我们只是将变量private定义并定义getter setter来访问这些变量,那么数据将被封装。 我的问题是,如果我们可以通过getter和setter访问变量(数据),那么数据是如何隐藏或安全的? 我搜索了大量的解释但没有找到任何东西。 每个人都在他们的博客和post中说它是一种数据隐藏技术,但没有解释/阐述它。 期待在stackoverflow论坛上获得适当,满意的解释。

为什么没有参数反差方法可以覆盖?

重写方法时,C ++和Java支持返回类型协方差。 但是,它们都不支持参数类型中的反差 – 相反,它转换为过载 (Java)或隐藏(C ++)。 那是为什么 ? 在我看来,允许这样做是没有害处的。 我可以在Java中找到它的一个原因 – 因为它无论如何都有“选择最特定版本”的重载机制 – 但是不能想到C ++的任何原因。 示例(Java): class A { public void f(String s) {…} } class B extends A { public void f(Object o) {…} // Why doesn’t this override Af? }