相关疑难解决方法(0)

什么是java中的多态方法?

我正在研究用于SCJP测试的java语言.

理解"多态方法"有点难.

你能帮我解释一下吗?或者给我一些链接?

java polymorphism terminology

6
推荐指数
2
解决办法
2万
查看次数

Javascript-简化前缀表示法

我正在处理Kattis 问题,在这里我应该以前缀表示法接受输入,将其简化并以前缀表示法返回它。这些是输入和输出的示例:

Sample Input 1                    Sample Output 1
+ 3 4                             Case 1: 7
- x x                             Case 2: - x x
* - 6 + x -6 - - 9 6 * 0 c        Case 3: * - 6 + x -6 - 3 * 0 c
Run Code Online (Sandbox Code Playgroud)

我已经编写了这段代码,并且如果使用这种输入数据运行它,我将获得与上述完全相同的输出。但是,我从Kattis那里得到了错误的答案。

我在这里做错了什么?由于没有任何调试提示,这令人沮丧。

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

const operators = ['+', '-', '*', '/'];
const operatorsFunctions = {
    '+': (a, b) => a …
Run Code Online (Sandbox Code Playgroud)

javascript prefix-notation kattis

6
推荐指数
1
解决办法
316
查看次数

抽象类类型签名中的可选参数

班级:

type NotAbstract () = 
    member this.WithOptionalParameters (x, ?y) = 
        let y = defaultArg y 10
        x + y
Run Code Online (Sandbox Code Playgroud)

具有以下类型签名:

type NotAbstract =
  class
    new : unit -> NotAbstract
    member WithOptionalParameters : x:int * ?y:int -> int
  end
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用:

[<AbstractClass>]
type AbstractExample () = 
    abstract WithOptionalParameters: int * ?int -> int /// Ouch...

type NotAbstract () = 
    inherit AbstractExample ()
    override this.WithOptionalParameters (x, ?y) = 
        let y = defaultArg y 10
        x + y
Run Code Online (Sandbox Code Playgroud)

如何在带有可选参数的函数的抽象定义中编写正确的类型签名?我没有在这里找到任何暗示.

PS:我知道(类似的)结果可以通过多态实现

f# abstract-class optional-parameters

5
推荐指数
1
解决办法
926
查看次数

条件逻辑的嵌套 if 的替代方案

是否有一种设计模式、方法或语言可以让您编写超越嵌套 If 的复杂条件逻辑?

至少,这种问题有名字吗?我无法在这里或通过 Google 找到任何描述我试图解决的问题,而不仅仅是用 Switch 语句替换 IF 。

我正在使用脚本来生成一堆数据。作为其中的一部分,我想添加大量分支条件逻辑,这些逻辑应该提供多样性并阻止某些组合。

例如,如果用户是 A 组的一部分,那么他们就不能是 B 组的一部分,如果他们具有属性 C,那么这会将他们限制为特征 5 或 6,但不能低于或高于该特征。

conditional-statements

5
推荐指数
1
解决办法
1万
查看次数

重写 toString() 是否被视为多态?

我今天参加 Java 考试,考官问我是否可以提供在 Spring Boot 项目中使用多态性的示例。

由于我一开始想不出任何东西,他指出我在模型中重写了toString() ,这是动态/运行时多态性。

但是,我不确定我是否理解他的观点,因为根据我的理解,当我们有一个指向子类对象的父类引用变量(关注动态多态性)时,行为被认为是多态的。

然后在运行时,获取父类变量指向的实际对象并调用其方法,如此处很好地解释

但是,我在项目中没有使用向上转换(即使用 Object 类变量初始化 POJO 类)。

因此,我的问题是 -尽管父类(Object)从未用作引用变量,但重写 toString() 是否被视为多态?

我在 Stackoverflow 上找到的所有运行时多态性示例(包括此处的示例和带有toString 的示例)都说明了一种情况,即我们有一个父类变量指向子类对象,例如:

    Object object = new User("petar");
    String name = object.toString(); // assign to variable for clarity`s sake
    System.out.println(name);
    // prints petar
Run Code Online (Sandbox Code Playgroud)

我的用户类别是:

public class User {

    String name;

    public User(String name) {
        this.name = name;
    }

    public String toString() {
        return name;
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,在我的项目中,我只是使用自己的引用变量创建用户和其他 POJO 类,例如:

    User user = …
Run Code Online (Sandbox Code Playgroud)

java polymorphism overriding late-binding upcasting

5
推荐指数
1
解决办法
1753
查看次数

为什么object.equals(new Integer(1))等于true?

我正在努力理解这个Koan:

@Koan
public void equalsMethodCanBeChangedBySubclassesToTestsIfTwoObjectsAreEqual() {
    Object object = new Integer(1);
    assertEquals(object.equals(object), true);
    assertEquals(object.equals(new Integer(1)), __);
    // Note: This means that for the class 'Object' there is no difference between 'equal' and 'same'
    // but for the class 'Integer' there is difference - see below
}
Run Code Online (Sandbox Code Playgroud)

据我所知,因为objectObject类的一个实例,该.equals()方法尚未被覆盖,因此检查对象是否相等.

如果new Integer(1)创建一个新实例,那么它应该是一个单独的对象object.按照我的思路,正确的答案应该是false,但只有true通过.我逻辑中的缺陷在哪里?

编辑:我知道-128和127之间的整数是缓存的.如果我对该object对象的理解是正确的(如上所述),那么这是无关紧要的.

java

4
推荐指数
1
解决办法
412
查看次数

多态性 - 重载/覆盖

我知道这个问题已经在StackOverflow中完成,并且已经有很多问题已经发布.我可能已经阅读了它们中的每一个但是,有这个令人唠叨的疑问:我认为我理解重载很好,并且覆盖.让我变形的是多态性.

例如,这个问题的接受答案解释了这一点shape.Draw().我很困惑这与Overriding有什么不同(其他时候我对它与Overloading的不同之处感到困惑).

此外 - 多态性本质上是指从抽象类派生出来的吗?(我想我几乎所有关于这个主题的答案都使用了一个抽象的动物类,让一只猫和一只狗喵喵叫/吠:)

总之,我的问题是:

  1. 什么是多态性wrt重载和覆盖?

  2. 有人可以在没有抽象类的情况下解释多态性 - 谢谢!

  3. 重载/覆盖不是多态的子类型,是吗?

编辑添加第3个问题并修改第2个问题.

java polymorphism overriding overloading

3
推荐指数
1
解决办法
3073
查看次数

将String转换为Object时调用toString()

这是我的示例代码:

String str = "hello";
Object obj = (Object)str;
System.out.println(obj.toString());
Run Code Online (Sandbox Code Playgroud)

我找到了Object的源代码,toString()方法是:

public String toString() {   
   return getClass().getName() + "@" + Integer.toHexString(hashCode());
} 
Run Code Online (Sandbox Code Playgroud)

我认为这个例子的结果是这个Object的地址,比如[B @ 15db9742,在我将str转换为Object之后,但它仍然打印你好.为什么?Shound not obj使用Object的方法?任何人都可以向我解释它的原理吗?

java

3
推荐指数
1
解决办法
296
查看次数

如何用相同的方法和继承编写2个类?

我有X类,它们具有不同的信息和计算方法,应该共享但可以覆盖,所以:

class Rule1 {
    int type = 1;
    string name = "Rule";
    public float Calc()
    {
        return 1 + 2 + type; // SAME
    }
}

class Rule2 {
    int type = 2;
    string name = "Rule2";
    public float Calc()
    {
        return 1 + 2 + type; // SAME
    }
}

class Rule3 {
    int type = 3;
    string name = "Rule3";
    public float Calc()
    {
        return 3 + 4 + type; // DIFFERENT
    }
}
Run Code Online (Sandbox Code Playgroud)

我要在调用方法中编写的内容如下:

class Calculator
{ …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism inheritance encapsulation abstraction

2
推荐指数
1
解决办法
91
查看次数

我不明白基类的继承

我对继承的理解非常基本。

我想创建一个基类,它实现IDisposable然后让其他具有功能的类从该基类继承,以便它们共享一个基类型。

它将允许我将每个对象放入一个列表中,以便我可以在需要清理时一次性处理所有内容。问题是,C# 中的类只能继承一次,否则只能使用接口。

现在,像Thread, 之类的类如何从我的基类继承而无需我重新编写Thread该类的基本代码?

这听起来可能很愚蠢,但简而言之:我想让已经存在的类继承我选择的基类,而不会失去其功能。(这样一个项目中使用的所有类都有一个共同的基础,总结为一种对象类型,例如List

这甚至可能吗?

c# inheritance interface subclass base-class

2
推荐指数
1
解决办法
120
查看次数

如何从子类中的方法调用子类中覆盖的父方法?

我想调用 FamilyCar 方法 Move()。如果 FamilyCar 是 LandVehicle,我想同时调用 LandVehicle Move() 方法。我正在寻找非常基本的方法来做到这一点。

基类

class LandVehicle : Vehicle
    {
        public override string Move()
        {
            return "Move on the wheels";
        }
    }
Run Code Online (Sandbox Code Playgroud)

子类

class FamilyCar : LandVehicle
{
        public override string Move()
        {
            return "Pip pip!";
        }
}
Run Code Online (Sandbox Code Playgroud)

c# oop methods method-call

1
推荐指数
1
解决办法
57
查看次数

为什么我们可以将字符串分配给简单的Java对象

我想知道为什么这是合法的:

Object mystring = "hello";
System.out.println(mystring);
Run Code Online (Sandbox Code Playgroud)

这打印hello.但为什么Object会像字符串一样对待?

java

0
推荐指数
1
解决办法
75
查看次数