Tag: oop

为什么不在java中的匿名类中使用构造函数?它与OOP的规则相矛盾

oops规则是“没有构造函数就没有类可以存在”。没关系。但是在java中,匿名类只能有它的构造函数。因为它没有任何名称。 所以它与OOPS规则相矛盾。我真的很困惑。它是否打破了OOPS规则?请帮忙

在JAVA中实例化一个抽象类?

我正在学习JAVA并继续阅读JAVA:Herbert Shildt的完整参考书 。 我在Java中学习了抽象类,但无法理解这一行背后的原因: 抽象类不能使用new运算符直接实例化。 我搜索了web和stackoverflow并跟着这些问题: 为什么我们不能在JAVA中实例化一个抽象类? 为什么我们不能在没有匿名类方法的情况下在java中实例化接口或抽象类? 在一个答案中,有人写道: 简单地说,在一个好的面向对象的程序中,你永远不应该想要实例化一个抽象类或接口。 如果你这样做,设计可能是错误的。 我不明白为什么重要的是不要为优秀的OOP设计实例化一个抽象类。 如果有人可以给出一个很好的解释,那么请帮忙。

事后实现接口

我认为,以下不能用Java完成。 但我很乐意学习如何实现类似于它的东西。 假设我们有一个C类,它已经在编译代码中使用了。 (我们既不能改变代码也不能改变C的原始定义)。 进一步假设有一些有趣的代码可以重复使用,如果只有C实现接口I.实际上,或许不那么简单,派生D只是C +接口方法的实现。 然而,一旦我有一个C,似乎没有办法说:我希望你成为一个D,也就是说,一个C实现我。 (旁注:我认为如果D是C,那么应该允许c的运行时类型为C的强制转换(D)c,并且C的唯一区别是添加方法。这应该是安全的,如果不是吗?) 怎么能解决这场灾难呢? (我知道工厂设计模式,但这似乎不是一个解决方案。因为,一旦我们设法在以前是C的所有地方创建D,其他人发现另一个接口J有用并导出E扩展C实现J.但是E和D是不兼容的,因为它们都为C添加了一组不同的方法。所以虽然我们总是可以传递一个预期C的E,但是我们不能通过一个预期D的E.而是,现在,我们需要一个新类F扩展C实现I,J。)

Java中国际象棋游戏的OOP设计(片/板交互的麻烦)

我正在尝试用Java编写自己的国际象棋游戏。 我已经开始编写课程,我的高级想法如下: 我有这些字段的Piece类: private String name; private String color; 最初我会为每件作品设置一个x和y坐标,但这似乎更像是董事会的财产。 这让我… 我有一个像这样的字段的Board类: Piece[][] myBoard = new Piece[8][8]; 我不确定我应该在哪里/如何跟踪作品的位置。 截至目前,我只有一个2d的Piece对象数组。 但是,我认为这会带来一些挑战。 例如,假设用户点击一块,想要移动它。 我需要弄清楚移动是否有效,为此,我需要当前的方块。 如果每个棋子都有一个x和y坐标,我会在两个地方(在Board类的2d数组中)和当前棋子的x和y坐标更新游戏状态。 这看起来很糟糕…… 有什么建议么? 感谢Mariogs的帮助

需要一些帮助才能理解Anotations – Spring annotations

我正在努力学习Spring和Hibernate,我真的很难理解Annotations以及它们是如何工作的。 我在互联网上看到的大部分示例都是基于注释的示例,因此我需要先了解注释的工作原理才能学习Spring或Hibernate 我知道它们是什么以及它们的用途。 我知道他们会替换xml配置。 即您可以使用注释在Java代码中直接配置bean。 我不明白的是如何使用它们以及何时可以使用它们。 试着理解如何做到这一点我认为如果我看到两者之间的差异会有所帮助。 我这里有一个简单的Spring程序。 如果我要将此示例程序转换为使用注释我需要做什么? 我想这样做的原因是因为我在下面提供的程序是我非常理解的程序(我正在阅读的Spring in Action书中的一个例子)。 如果它被转换为注释版本,我将了解注释的使用方式和位置。 有什么建议么? 提前致谢 instrumentalist.xml 工具主义界面 package com.sia.ch1.instrumentalist; public interface Instrument { void play(); } 乐器演奏者 package com.sia.ch1.instrumentalist; import com.sia.ch1.performer.PerformanceException; import com.sia.ch1.performer.Performer; public class Instrumentalist implements Performer{ private Instrument instrument; private String song; public Instrumentalist(){} public void perform() throws PerformanceException{ System.out.print(“Playing ” + song […]

从另一个类访问静态变量

我在同一个包中有两个类。 我在一个类中声明了一个static variable ,并希望在另一个类中访问该变量。 这是我已经声明了静态变量的代码 public class wampusGUI extends javax.swing.JFrame { static String userCommand; public wampusGUI() { initComponents(); } public void setTextArea(String text) { displayTextArea.append(text); } private void enterButtonActionPerformed(java.awt.event.ActionEvent evt) { userCommand = commandText.getText(); } public static void main(String args[]) { /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { […]

Java:在各种其他类中使用相同的类实例

这可能是一个愚蠢的问题,但我不知道它的答案,我不知道在哪里搜索答案,所以如果有人可以帮助我会很好。 我有一个类(让我们命名为A)具有不同的成员和方法。 我在另一个类中使用此类的方法(让我们将其命名为B)。 对于每个创建的B-Object,我想使用A的SAME实例。这可能吗? 实际上我在B中有一个构造函数,我称之为A a = new A(); 当然,我总是得到这个类的不同实例。 我现在该怎么改变这个? 我知道可以用spring框架解决它(将相同的对象注入到B的实例中),但我无法使用它。 怎么还能解决这个问题? 非常感谢您的帮助! 🙂

Java编译器如何为较低边界的通配符执行类型擦除?

在使用generics类型编译源代码时,Java编译器会自动执行类型擦除,用适当的原始类型替换generics声明。 根据Oracle文档,这个擦除取代了上面的绑定通配符 使用T 。这非常适合动态多态。 但是对于有界较小的通配符如何执行此擦除 看到每个类都有一个共同的超类(Object),使用它会破坏整个目的吗?

Java中Decorator模式的替代方案?

假设您具有以下与统计相关的类的层次结构,其结构类似于Template方法模式 : interface S { // Method definitions up-to and including the S3 class } class S0 implements S { // Code that counts samples } class S1 extends S0 { // Code that calls the superclass methods and also computes the mean } class S2 extends S1 { // Code that calls the superclass […]

使用getter和setter的私有属性有什么好处?

在面向对象的编程中,我曾经有过这个问题而且我仍然这样做: 如果我们将为其创建一个公共getter和一个公共setter ,那么将一个类成员声明为私有会有什么好处? 我认为上述案例与将类成员声明为公开案件之间的安全级别没有任何区别。 谢谢!