为什么输出如下所示?
自行车已创建
安全运行。
齿轮改变
因为我们没有在任何地方调用Bike()
方法。
abstract class Bike {
Bike() {
System.out.println("bike is created");
}
abstract void run();
void changeGear() {
System.out.println("gear changed");
}
}
//Creating a Child class which inherits Abstract class
class Honda extends Bike {
void run() {
System.out.println("running safely..");
}
}
//Creating a Test class which calls abstract and non-abstract methods
class TestAbstraction2 {
public static void main(String args[]) {
Bike obj = new Honda();
obj.run();
obj.changeGear();
}
}
答案 0 :(得分:7)
本田类是使用Default Constructor
创建的如果一个类不包含构造函数声明,则隐式声明一个没有形式参数且没有throws子句的默认构造函数。
>>> a=1 >>> b=2 >>> print(id(a)) 1574071312 # this is the address of a >>> print(id(b)) 1574071344 # this is the address of b >>>c=a # assignment of a to c >>> print(c) 1 # c will contain now the value of a >>> print(id(c)) 1574071312 # this is the address of c which is same as a >>> c=b # re-assignment of b to c >>> print(c) 2 # c wil contain now the value of b >>> print(id(c)) 1574071344 # this the address of c now which is same as b
等同于声明:
public class Point { int x, y; }
因此,每次调用public class Point {
int x, y;
public Point() { super(); }
}
都会调用Bike()
答案 1 :(得分:3)
在Bike类中,您有一个构造函数Bike()来打印一条语句。因此,默认情况下,子类建立在其父类的构造函数上。这就是为什么每次创建Bike类的对象时,都必须显示打印语句。
答案 2 :(得分:0)
您已经使用默认构造函数(没有任何正式参数)创建了Honda类,因此,每当您使Honda类成为对象时,它将调用默认构造函数(Honda()),并且此构造函数将调用父类(Bike)作为默认对象构造函数和父类构造函数将打印语句“创建自行车”。