Java程序中的抽象

时间:2018-10-07 06:28:25

标签: java constructor abstract-class

为什么输出如下所示?

  

自行车已创建

     

安全运行。

     

齿轮改变

因为我们没有在任何地方调用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();
    }
}

3 个答案:

答案 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)作为默认对象构造函数和父类构造函数将打印语句“创建自行车”。