Tag: oop

为什么Stack在JDK中扩展Vector?

Stack不是Vector那么为什么Stack类正在扩展(是一种关系)在JDK中的Vector类,Stack假设使用push()和pop()操作,但因为它扩展了Vector我能够做add()并remove()堆栈上的操作。 我认为宁可扩展Vector类,Stack类应该使用Vector类作为组合。

OOP BlackJack游戏(创建甲板)

我正在尝试创建一个OOP友好的Java BlackJack游戏来提升我的知识。 我碰壁了,我只是不知道看到问题。 想知道是否有人能指出我的问题。 此外,在谷歌搜索相关主题后,我发现人们一次又一次地说使用枚举会更有益,因为初学者会建议吗? 或者我应该暂时坚持使用String数组。 谢谢。 我的代码: public class BlackJack{ BlackJack() { Deck deck = new Deck(); deck.createDeck(); System.out.println(deck.deckList); } public static void main(String[] args) { new BlackJack(); } } public class Card{ private String valueCard; private String suitCard; public Card(String value, String suit) { this.valueCard = value; this.suitCard = suit; } public String […]

并行inheritance层次结构真的是代码味道吗?

我无法弄清楚如何在实践中避免并行层次结构。 例如,考虑一个必须在不同级别创建/保存/编辑笔记的应用程序,它是一个基于java swing的应用程序。 域层次结构: AbstractNote < MonthNote < DayNote < ProductNote 只读视图层次结构(在JTabPane上显示,每个都有JTable以显示特定的注释详细信息) AbstractNotePanel < MonthNotePanel < DayNotePanel < ProductNotePanel 注释编辑器层次结构(当用户单击表行中的特定注释时显示。 AbstractNoteEditorDialog < MonthNoteEditorDialog < DayNoteEditorDialog < ProductNoteEditorDialog 我读过一种避免这种情况的方法是使用访客模式。 这里但这似乎不适用于我的情况。 我对上面的设计很满意,因为大多数常见代码都是抽象类(在那里应用模板方法模式)。 如果我必须创建一个新类型的注释,例如YearNote,那么我必须并行创建YearNotePanel和YearNoteEditorDialog,这对我来说是完全可以接受的,因为我不需要因为模板而编写很多代码。 最重要的是,我想在设计中避免代码味道。 请在上面的场景中建议我替代设计,以便我的代码仍然是模块化的。 谢谢

定义初始化与构造函数初始化

在Java中,但在其他OO语言中,在其定义中初始化属性之间存在差异,如 class Example { public Sample sample_attribute = new Sample(); } 并使用构造函数初始化它? class Example { public Sample sample_attribute; public Example() { sample_attribute = new Sample(); } } 我想不出任何实际的区别,有吗? 否则,是否存在一种方法比另一种方法更好的情况,即使它们具有相同的结果?

构造函数在抽象类中有什么用?

既然我们无法实例化抽象类,那么在抽象类中使用构造函数的必要性是什么?

Java使用范围分辨率/“点”运算符“扩展”?

我在阅读一些代码时遇到过这个问题,我完全不知道它意味着什么。 我尝试使用谷歌搜索等等但我没有得到任何东西,可能是由于缺乏词汇量。 代码: public final class GeneralPath extends Path2D.Float { // code and whathaveyou } 到目前为止我所知道的: 所以我对“公共最终类ClassName extends”部分没有任何疑问,但我不明白超类指定中是否存在点/范围解析运算符。 对于初学者,我想有人会说“Java没有范围解析运算符”来澄清Java和Cpp / other-OOP语言之间的细微差别,这很好,我很高兴知道这种微妙的区别。 “private”关键字在一次hw任务中杀了我一次,我希望有人注意到Java和C中“private”之间的区别。 我很困惑,因为显然它没有引用超类的成员,因为“成员”是大写的,即使它是,但引用一个对象的成员而不仅仅是对象类本身似乎是多余的。 此外,我没有找到关于这个主题的信息,因为大多数编写java how-to的人倾向于从更简单的概念开始,比如“基本”类inheritance,所以我找不到涉及“dot”运算符的任何东西。使用“extends”关键字。 如果我使用太多技术术语,我想知道为什么他们使用点运算符“Path2D.Float”,或者至少,点运算符在这个上下文中做了什么。 太感谢了!

Java私有方法覆盖

我遇到了这种情况。 我们有一个类让我们说主要有私人方法打印。 另一个类Main1扩展了Main类并重新定义了print方法。 由于main1是Main1类的对象,我希望调用main1 print方法… public class Main { public static void main(String[] args) { Main main1 = new Main1(); List list = new ArrayList(); main1.print(list); } private void print(List string) { System.out.println(“main”); } } class Main1 extends Main { public void print(List string) { System.out.println(“main1”); } } 在这种情况下,当我们运行程序时,它会打印“main”。 它真的让我感到困惑,因为该方法是私有的,甚至不是Main1类的一部分。

Java super()inheritance

这个问题的简短摘要:我有一个由子类扩展的父类。 public class Parent{ public Parent(){ //constructor logic } } 这个子类使用super调用Parent的构造函数: public class Child extends Parent{ public Child(){ super(); } } 如果我可以在Grandchild类的构造函数中调用super()方法,我想知道是否要扩展Child类: public class Grandchild extends Child{ public Grandchild(){ super(); } }

将已知类型的引用转换为类型层次结构之外的接口

假设你有一个像这样的干净课: public class A { // Stuff } 和这样的界面: public interface G { // Stuff } 为什么我被允许这样做: A a = new A(); ((G) a) // No errors thrown 我无法理解为什么当它们彼此无关时,应该可以从A类转换到接口G. 有人可以向我解释一下吗? 跟进。 如果我做以下事情: public class C implements G { // Stuff } 这不会编译: ((C) a) 实现接口的类和接口之间有什么区别? 编辑:我得到一个编译器错误说: 无法从A转换为C.

不能在另一个类的swing组件中设置值

我的UI有这个类 public class MyFrame extends JFrame{ JTextArea textArea; public MyFrame(){ setSize(100,100); textArea = new JTextArea(50,50); Container content = getContentPane(); content.add(textArea); } public static void main(String[] args){ JFrame frame = new MyFrame(); frame.show(); UpdateText u = new UpdateText(); u.settext(“Helloworld”); } } 我有另一个类将设置textArea的文本,我扩展MyFrame以访问另一个类中的textArea。 public class UpdateText extends MyFrame{ public void settext(String msg){ textArea.setText(msg); } } 然后我实例化UpdateText并调用函数settext。 但文字似乎并没有在GUI中出现。 […]