Tag: oop

setter和getter方法是否打破了封装?

有人告诉我们应该避免使用限制器和吸气剂。 关于它有各种各样的想法,但根据我使用这些突破封装。 为什么? 因为它告诉世界一个物体的内部。 例如: class Point { private int x; private int y; void setx(int x) {…} int getx() {…} … } 该对象应该只暴露为客户端提供清晰抽象的行为。 class Point { private int x; private int y; int coordinate(int x) {…} // 0, 1, 2, 3 … } 那么,这些存取器和setter方法是否打破了封装?

方法本地内部类成员范围访问

如何访问与内部类成员实例或内部类的方法局部变量同名的方法变量? class A{ int a = 10; //1 public void someMethodA(){ final int a = 20; //2 class B{ int a = 30; //3 public void someMethodB(){ int a = 40; //4 System.out.println(“a = “+a); //access 4 System.out.println(“a = “+this.a); //access 3 System.out.println(“a = “+A.this.a); //access 1 System.out.println(?????); //how do I access value of a […]

处理 – 具有面向对象的编程问题

所以基本上,我的目标是创建像MS Paint软件这样的程序,我可以用鼠标拖动绘制形状并改变颜色。 这是我的一个很长的剧本。 我对OOP相当新,所以我在努力使所有function协同工作时遇到了困难。 主要 Button button1, button2, button3, button4, button5, button6, button7; Rect rect; Circle circle; int mode = 1; void setup() { size(900,600); smooth(); rect = new Rect(0,0,0,0, new PImage()); circle = new Circle(0,0,0,0, new PImage()); color gray = color(234); color black = color(0); color white = color(255); color red = color(255,0,0); color […]

instanceof检查有什么问题吗?

随着generics的引入,我不愿意尽可能地执行实例或转换。 但在这种情况下,我没有看到解决方法: for (CacheableObject cacheableObject : cacheableObjects) { ICacheable iCacheable = cacheableObject.getObject(); if (iCacheable instanceof MyObject) { MyObject myObject = (MyObject) iCacheable; myObjects.put(myObject.getKey(), myObject); } else if (iCacheable instanceof OtherObject) { OtherObject otherObject = (OtherObject) iCacheable; otherObjects.put(otherObject.getKey(), otherObject); } } 在上面的代码中,我知道我的ICacheables应该只是MyObject或OtherObject的实例,并且根据这一点,我想将它们放入2个单独的映射中,然后再进行一些处理。 如果没有我的检查实例,我还有其他方法可以做到这一点。 谢谢

计算Pi Java程序

我正在学习我的第一个Java编程课程,这是我的第一个课程。 我对如何处理它感到很困惑。 任何帮助或更正将不胜感激。 您可以使用以下系列来估算常量PI的值: PI = 4 ( 1 – 1/3 + 1/5 – 1/7 + 1/9 – 1/11 + … + ( (-1)^(i+1) )/ (2i – 1) ) 提示用户输入i的值(换句话说,使用此系列中的多少项)来计算PI。 例如,如果用户输入10000,则对该系列的前10,000个元素求和,然后显示结果。 除了显示最终结果(PI的最终近似值)之外,我希望您沿中间计算的方式显示每个10的幂。所以10,100,1000,10000等等,在屏幕上显示近似值PI的总和元素数量。 这是我到目前为止所做的.. import java.util.Scanner; public class CalculatePI { public static void main(String[] args) { // Create a Scanner object Scanner input = new Scanner […]

抽象类中是否有任何空的具体方法?

我最近在查看一些开源代码PicketLink代码。 如果你看一下这个类 ,你会在抽象类中看到一些什么都不做的具体方法。 这有什么用途吗? 我想到了两件事: 如果该方法需要被子类覆盖而未在父抽象类中定义,为什么不简单地将其设为抽象? 如果只有一些子类实际上需要实现该方法,那么这是否表明需要重构类层次结构,以便不强迫孩子使用不适用的方法?

访问枚举构造函数中的其他枚举

我需要类似以下的东西 enum EE { A(“anything”), B(“beta”), … Z(“zulu”), ALL, ; EE(String s) { this.s = s; } EE() { String s = “”; for (EE ee : values()) { // PROBLEM HERE if (ee != ALL) s += ” ” + ee.s; } this.s = s; } } 创建ALL我想访问枚举的其他成员。 由于values()返回null ,因此上述操作null 。 使用A , B […]

覆盖构造函数

我对Overriding Constructors非常困惑。 构造函数不能被覆盖是我在谷歌搜索它时得到的结果我的问题是 public class constructorOverridden { public static void main(String args[]) { Sub sub = new Sub(); sub.test(); } } class Super { Super() { System.out.println(“In Super constructor”); test(); } void test() { System.out.println(“In Super.test()”); } } class Sub extends Super { Sub() { System.out.println(“In Sub constructor”); } void test() { // overrides test() […]

Collections.sort使用什么设计模式?

以下列方式将比较器应用于列表时,使用的设计模式是什么或此处使用的技术是什么? Collections.sort(myCollection, new Comparator() { @Override public int compare(MyItem item1, MyItem item2) { return item1.getId().compareTo(item2.getId()); } });

在Java中,为什么超类方法不能从子类实例访问受保护的或私有的方法/变量?

让我们从另一个行为开始:即使您将方法/变量声明为私有,同一个类的另一个实例也可以访问它。 没关系,我可以忍受它。 我将这些类称为私有而不是实例私有。 现在问题部分:例如,在运行时我希望能够检查此类中的所有String变量都不为null,如果它们为null,则应将其更改为字符串“NULL”。 我可以使用reflection来运行变量并获取它们的值。 但是如果我扩展我的类并添加私有甚至保护变量,我的基类就无法访问它们。 在使用它们之前,我必须对变量设置setAccessible 。 所以请向我解释为什么基类(超类)不能从其子类访问私有/受保护变量。 它是它的子类,所以我不明白。 这背后有什么想法? 我知道超类不应该知道它的子类,但在我的例子中它是有意义的,不是吗? 是因为我不能或不应该以这种方式限制我的子类? 更新:根据答案,我还想知道:为什么不从同一个类访问另一个实例的私有变量被视为违反封装?