在单元测试中得到了这个。所以:
abstract class A {...}
class B extends A {...}
A a = new B();
非常怀疑它是否可行,但此刻我完全感到困惑。课程内容无关紧要。
答案 0 :(得分:1)
是的,这个概念在java中被称为polymorphism
。父级可以包含子类的引用。和父级可以是interface
或abstruct 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。抽象类变量修饰符没有限制。对于抽象类变量,在声明时不需要执行初始化。抽象类可以声明实例和静态块。在内部接口我们不能声明实例和静态块,否则我们将得到编译时错误。接口不能声明构造函数。请记住这些有趣的事实。