zoukankan      html  css  js  c++  java
  • java 报错:Implicit super constructor Point() is undefined. Must explicitly invoke another constructor

    在做java的实验题时遇到了一个报错

    Implicit super constructor Point() is undefined. Must explicitly invoke another constructor

    程序的主要代码如下:

    public class Point {
        int x, y;
        //Point(){}//注意这一行
        Point(int a, int b){
            x = a;
            y = b;
        }
        public double distance() {
            return Math.sqrt(x*x+y*y);
        }
        void print() {
            System.out.println("This is the superclass!");
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Point superp = new Point(1,1);
            System.out.println("superp.distance()="+superp.distance());
            superp.print();
            Point3d subp = new Point3d(1,1,1);
            subp.print();
    
        }
    
    }
    class Point3d extends Point{
        int z;
        Point3d(int i, int j, int k){//如果没有上面注释的那一行,这里就会报错
            x = i;
            y = j;
            z = k;
        }
        void print() {
            System.out.println("This is the subclass!");
        }
    }

    我们知道,Point3d继承了Point,那么在构造Point3d之前,就会先构造Point。
    new Point3d的时候用的是默认的构造函数,而子类默认的构造函数调用的也是父类默认的构造函数。
    但是父类有了人为指定的构造函数,就覆盖了本身自动生成的默认无参构造函数,换言之,父类没有无参构造函数,那么就出错了。

    所以解决办法是手动再在父类中添加一个无参的与默认构造函数形式相同的构造函数,即:

    public class Point {
        int x, y;
        Point(){}//注意这一行
        Point(int a, int b){
            x = a;
            y = b;
        }
  • 相关阅读:
    jQuery技巧大放送
    网页挂马工作原理完全分析
    C#常见问题
    网站优化之页面优化
    SQL大全分享
    获得本机的可用的所有打印机
    C#文件操作方法大全
    编程范式及其代表语言
    23种模式简說
    C# Open Source
  • 原文地址:https://www.cnblogs.com/SophieWang-cmu/p/13929336.html
Copyright © 2011-2022 走看看