这段代码在Java中有效吗?

时间:2013-10-03 08:19:43

标签: java class abstract-class

在单元测试中得到了这个。所以:

abstract class A {...}

class B extends A {...}

A a = new B();

非常怀疑它是否可行,但此刻我完全感到困惑。课程内容无关紧要。

6 个答案:

答案 0 :(得分:1)

是的,这个概念在java中被称为polymorphism。父级可以包含子类的引用。和父级可以是interfaceabstruct class。甚至是you need not to cast。例如 。

a animal can be horse or cat  , here animal is an interface or abstract class. 

我推荐(SCJP Sun认证程序员-kathy sierra)一书有很多与java语言相关的概念。

答案 1 :(得分:0)

是的,这在java中是有效的

abstract class A {...}

class B extends A {...}

A a = new B();

答案 2 :(得分:0)

是的,这是一个有效的java赋值语句。

A a = (A) new B(); 

在java中,可以从父类引用子对象。

答案 3 :(得分:0)

这是有效的。 根据Java的基本规则“超类引用(A a)可以引用子类对象(b = new B())”。

答案 4 :(得分:0)

它在java中有效。这被称为隐式向上投射(JVM将子类型转换为超类型对象),其中超类型的引用可以引用子类型,但是使用超类型引用,您只能访问那些变量和方法,以超类型声明/定义。

答案 5 :(得分:0)

接口 - 无论您是否声明,每个方法都是公共的和抽象的。您不能使用以下修饰符声明接口方法。无论我们是否声明,界面内存在的每个变量都是公共静态和最终变量。您不能使用以下修饰符声明接口变量:private,protected,transient和volatile。抽象类中存在的变量不必是public,static和final。抽象类变量修饰符没有限制。对于抽象类变量,在声明时不需要执行初始化。抽象类可以声明实例和静态块。在内部接口我们不能声明实例和静态块,否则我们将得到编译时错误。接口不能声明构造函数。请记住这些有趣的事实。