当前位置: 首页 > 知识库问答 >
问题:

为什么在Java中的类名周围使用括号?

周翼
2023-03-14

我遇到了一些代码,但无法理解它的某一方面,尽管我做了一些广泛的搜索!

我的问题是:为什么类有时会像下面的代码一样在括号中声明?

public class Animal {

    public static void hide() {
        System.out.println("The hide method in Animal.");
    }

    public void override() {
        System.out.println("The override method in Animal.");
    }
}

public class Cat extends Animal {

    public static void hide() {
        System.out.println("The hide method in Cat.");
    }

    public void override() {
        System.out.println("The override method in Cat.");
    }

    public static void main(String[] args) {
        Cat myCat = new Cat();
        Animal myAnimal = (Animal)myCat;
        myAnimal.hide();
        myAnimal.override();
    }
}

我特别关注这一行代码:

            Animal myAnimal = (Animal)myCat;

我相信这与一个类扩展另一个类的事实有关,但我不确定括号内定义的类意味着什么。

在此方面的任何帮助都是非常感谢的。

共有3个答案

戚兴思
2023-03-14

即使代码产生正确的输出,如果您必须将对象强制转换为父类,然后调用父类的静态方法,则类可能需要以更好的方式设计。Java中的继承应该提供对常用方法和字段的访问。如果需要在父类中编写静态方法并使用子类的对象调用它,那么父类和子类之间的关系并不明确。

松桐
2023-03-14

这是一个强制转换-类型为<code>Cat</code>的<code>myCat</code>变量被强制转换为基类<code>Animal</code>。

这意味着它可以被认为是动物

这是Java中继承的一个基本功能。

正如@Sebastian Koppehel所评论的,在这种情况下不需要强制转换-<code>myAnimal)可以接受实现<code>Animal的任何类型。

柳晔
2023-03-14

你看到的是一个演员阵容,告诉编译器可以将猫分配给动物。

强制转换适用于编译器无法安全地将一种类型转换为另一种类型的情况,这可能是因为编译器不知道所涉及的类型,也可能是因为转换会丢失信息(例如,如果有一个double要存储在float类型的变量中)。

在你的例子中,造型是完全不必要的,因为猫延伸了动物;由于所有的猫都是动物,编译器不需要显式的强制转换来告诉它可以将猫分配给动物。

铸造应该留给特殊场合。如果你经常使用显式强制转换,那么这可能意味着你没有从类型系统中获得最大的好处。

 类似资料:
  • 问题内容: 尽管进行了一些广泛的搜索,但我遇到了一些代码,但无法理解它的某个方面! 我的问题是:为什么有时在括号内声明类,如以下代码所示? 我特别关注这一行代码的地方: 我认为这与以下事实有关:一个类扩展了另一个类,但不确定括号中定义的类表示什么。 在这方面的任何帮助表示赞赏。先感谢您。 问题答案: 您所看到的是强制转换,告诉编译器可以将Cat分配给Animal。 强制转换用于编译器无法将一种类型

  • 问题内容: Java中float和double的范围包括什么? 为什么不建议在精度要求很高的地方使用float或double? 问题答案: Java的类的成员包含类型的Min和Max值。 检出的和静态最终成员。 (有些)人们会建议不要在精度和精度至关重要的事情上使用浮点类型,因为舍入误差可能会使可测量(少量)的量不起作用。

  • 问题内容: 在阅读了一些有关SQL问题的答案和评论,并听到我的一个朋友在一个禁止他们使用的政策的地方工作之后,我想知道在MySQL的字段名周围使用反引号是否有问题。 那是: 问题答案: 使用反引号允许您使用其他字符。在查询编写中,这不是问题,但是如果假设您可以使用反引号,那么我认为它可以让您摆脱诸如 当然哪个会生成命名错误的表。 如果您只是为了简洁起见,我认为它没有问题,那么您会注意是否按如下方式

  • 问题内容: 我想知道为什么Java数组声明使用大括号而不是标准括号。如此处所示。我认为总体上可能需要进一步理解大括号,但这是我现在的议程。 相反,这是正确的。 问题答案: 圆括号通常表示集合和合奏,而圆括号通常表示类似C语言的参数。 很久以前,人们已经习惯了与C进行这种约定。我非常确定它可以在Java中以这种方式工作,以与旧语言保持某种语法一致性。

  • 问题内容: Java不能执行运算符重载,但可以用于和和其他一些类。这怎么可能? 更新: 为什么这样做? 问题答案: 不是操作员重载的示例。在语言中被内置为合并运算符 和 算术加法运算符。 这意味着用Java编写程序的人不能重载运算符,但是就Java语言的语法而言,它被定义为连接和加法运算符。 编辑 它适用于其他类,如和由于自动装箱。 如果您看一下执行字符串连接的Java程序的字节码,您会发现它创建

  • 我一直在仔细阅读这篇SO文章,试图将花括号文字放在我的插值字符串周围。 我对的预期结果是“{foo}”。我曾尝试用反斜杠转义外部的花括号,但这不起作用,我也没想到会这样。我怎么才能在插入的字符串变量周围加上文字花括号?更准确的例子是: 预计:“我想吃一些{foo}。” 实际:“我想吃一些{testString}。” 我怎样才能做到这一点?(我还在和之间尝试了,但没有成功。)