小编spa*_*key的帖子

对象的区域 - 抽象类 - Java

我正在使用Java:The Complete Reference这本书学习Java .目前我正在研究抽象类的主题.

请注意:stackoverflow上有类似的问题.我搜查了他们,但我无法理解这个概念.

如果我运行以下程序,它会产生正确的输出,但我不明白这个概念.

这里对Abstract类的引用变量有什么需求.我可以在没有抽象类的引用变量的情况下获得输出.

首先,我运行以下程序并获得所需的输出.

abstract class Figure {
  double dim1;
  double dim2; 

  Figure(double a, double b) {
    dim1 = a;
    dim2 = b;
  }

  // area is now an an abstract method 
  abstract double area();
}

class Rectangle extends Figure {
  Rectangle(double a, double b) {
    super(a, b);
  }

  // override area for rectangle
  double area() {
    System.out.println("Inside Area for Rectangle.");
    return dim1 * dim2;
  }
}

class Triangle extends Figure {
  Triangle(double a, …
Run Code Online (Sandbox Code Playgroud)

java abstract-class

4
推荐指数
1
解决办法
1740
查看次数

为什么要调用超级构造函数?为什么我在打印到屏幕时出错?

我正在学习java编程.我尝试运行以下程序时收到编译错误.

public class Animal {
    public Animal() {
        System.out.println(“Making an Animal”);
    }
}

public class Hippo extends Animal {
    public Hippo() {
        System.out.println(“Making a Hippo”);
    }
}

public class TestHippo {
    public static void main (String[] args) {
         System.out.println(“Starting...”);
         Hippo h = new Hippo();
    }
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,如果这个程序运行没有错误,它将打印

开始...

制作河马

但在"Head First Java"一书中,他们提到了该程序的输出

开始...

制作动物

制作河马

这个输出怎么可能?我没有调用超类构造函数,但是如何在这里打印"制作动物".

任何人都可以解释这背后的逻辑吗?

如果我们调用子类构造函数,它的超类constrtuctor是否也被执行?

还有为什么我得到编译错误,我使用在线IDE来测试基本的java程序.

错误详情

编译错误注释(0)stdin copy标准输入为空编译信息Main.java:3:错误:非法字符:\ 8220 System.out.println(?制作动物?); ^ Main.java:3:错误:';' 期望System.out.println(?制作动物?); ^ Main.java:3:错误:非法字符:\ 8221 System.out.println(?制作动物?); ^ Main.java:8:错误:非法字符:\ 8220 System.out.println(?制作河马?); ^ Main.java:8:错误:';' 期待System.out.println(?制作河马?); ^ Main.java:8:错误:非法字符:\ …

java inheritance constructor

-4
推荐指数
1
解决办法
186
查看次数

标签 统计

java ×2

abstract-class ×1

constructor ×1

inheritance ×1