Java 简单介绍一下多态性
假设类Java 简单介绍一下多态性,java,polymorphism,Java,Polymorphism,假设类ClassOne从ClassTwo扩展而来,ClassOne是子类,ClassTwo是超类。如果我转到另一个类并键入:ClassTwo hello=newclassone()这是否意味着我只能使用继承自class2的ClassOne中的方法,而不能使用最初在ClassOne中的方法?(例如,名为void eat();的方法在ClassTwo和ClassOne中继承了它,但是void walk();方法只在ClassOne中,而不在ClassTwo中,因此通过使用hello关键字,我可以访问
ClassOne
从ClassTwo
扩展而来,ClassOne
是子类,ClassTwo
是超类。如果我转到另一个类并键入:ClassTwo hello=newclassone()
这是否意味着我只能使用继承自class2
的ClassOne
中的方法,而不能使用最初在ClassOne
中的方法?(例如,名为void eat();
的方法在ClassTwo
和ClassOne
中继承了它,但是void walk();
方法只在ClassOne
中,而不在ClassTwo
中,因此通过使用hello
关键字,我可以访问eat函数而不是walk函数吗?),我不太理解多态性的概念。有人能举个例子简单地解释一下吗?非常感谢。是的,就可用方法而言,系统将把classOne
视为classTwo
。
我喜欢将这些概念视为bucket,在本例中,classOne
适合于classTwo
bucket。如果我把classOne
放在classTwo
桶中,我只能看到classTwo
桶。然而,我可以从class2
桶中选择classOne
,也就是说,我可以铸造它
这也有助于向上和向下转换,即将对象转换为超类型或子类型。你要么把物品放在篮子里(上抛),要么把它从篮子里拿出来(下抛)
这个类比可能是废话,但它对我有帮助:)
要回答您的问题“是”,您不能对classOne
中的方法进行方法调用,如果该方法被强制转换为classTwo
这是方便的,而且是最好的。想想接口
,基本上是一个接口告诉您的对象提供一组方法。通过这种方式,我们可以确保每个调用该对象的人都可以使用这些方法,即该对象与其周围环境的契约
还有一个可能的重复:这个问题描述得非常清楚,你也可以很容易地编写和测试自己 类的对象与该类中的方法或字段的关系是“has a” 子类型与超类型的关系为“是” 在
ClassTwo hello=newclassone()中
,声明的hello
类型是ClassTwo
。右侧表达式使用类型ClassOne
计算,但随后被转换为类型ClassTwo
。ClassTwo没有walk()
classtwo确实有一个
eat()
,classone也是。当您还在ClassOne中声明void eat()
时(使用与其超类相同的方法签名),神奇的事情就发生了。像这样重写方法允许在类吃东西时发生不同或额外的行为。。。到目前为止,我已经放弃了一些条款,你可以继续为自己寻找。现在我要说的是,“吃”这个词在这里的用法是多态的。但这只是一个小例子。我无法封装任何如此抽象但功能强大的概念。在描述模拟类时,可能会重复,请从最一般的概念中编号/命名,例如B扩展A
;它是跨多种语言的相当标准的。往另一个方向(ClassOne扩展ClassTwo
)没有多大意义,因为ClassTwo
必须在概念上存在,才能扩展它。这个问题与-你可能会在那里找到一些有用的信息密切相关。