You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

公共类inherit必须在独立文件中定义的问题及Java继承代码解析

Java继承代码问题分析与规范解读

咱们一步步拆解你遇到的问题和代码里的规范要求哈:

1. 先解决核心错误:公共类的文件命名强制规范

提示信息:公共类型inherit必须在其自身的文件中定义。

这是Java编译器的硬性要求:只要一个类被public关键字修饰,这个类的文件名必须和类名完全一致(大小写敏感)。

  • 你的代码里public class inherit,那对应的文件名必须是inherit.java,不然编译器肯定报错。
  • 反过来,如果你的文件名是比如SuperInheritDemo.java,那public修饰的类名就得是SuperInheritDemo,其他非公共类可以放在同一个文件里。

2. 代码里的其他问题与规范建议

先把你的原代码贴出来方便对照:

class Suuper { 
    int value=100; 
    public void fnsuper() { 
        System.out.println("This is super class"); 
    } 
}
class sub1 extends Suuper { 
    public void fnsub1() { 
        System.out.println("Superclass values is:"+ value); 
        System.out.println("Sub class one"); 
    } 
}
class sub2 extends Suuper { 
    void fnsub2() { 
        System.out.println("Superclass value is:" + value); 
        System.out.println("Sub class two"); 
    } 
}
public class inherit { 
    public static void main(String[] args) { 
        sub1 obj1 = new sub1(); 
        obj1.fnsub1(); 
        obj1.fnsuper();...
    }
}

下面是具体问题和优化建议:

  • 命名规范问题:
    Java里类名要遵循大驼峰命名法(每个单词首字母大写),比如Suuper明显是拼写错误,应该改成Super;sub1→Sub1,sub2→Sub2,inherit→Inherit。方法名则用小驼峰,比如fnsuper→fnSuper,fnsub1→fnSub1,规范的命名能让代码可读性提升N个档次。
  • 成员变量的封装问题:
    父类Suuper里的value是默认访问权限(只能同包访问),如果子类和父类不在同一个包,就没法直接用了。建议改成private,然后写个getter方法获取值,这是面向对象封装的基本要求,能避免意外修改变量。
  • 语法错误:
    main方法里的...是无效语法,得删掉或者补全逻辑。比如要测试sub2的话,可以加两行代码创建sub2对象并调用方法。
  • 访问修饰符一致性:
    sub2的fnsub2是默认权限,sub1的fnsub1是public,如果这些方法是给外部调用的,建议统一成public,避免权限混乱。

3. 修正后的示例代码

给你改了一版符合规范的代码,参考下:

class Super { 
    private int value = 100; 
    public void fnSuper() { 
        System.out.println("This is super class"); 
    }
    // 封装变量,提供getter方法
    public int getValue() {
        return value;
    }
}
class Sub1 extends Super { 
    public void fnSub1() { 
        System.out.println("Superclass value is:" + getValue()); 
        System.out.println("Sub class one"); 
    } 
}
class Sub2 extends Super { 
    public void fnSub2() { 
        System.out.println("Superclass value is:" + getValue()); 
        System.out.println("Sub class two"); 
    } 
}
public class Inherit { 
    public static void main(String[] args) { 
        Sub1 obj1 = new Sub1(); 
        obj1.fnSub1(); 
        obj1.fnSuper();
        
        Sub2 obj2 = new Sub2();
        obj2.fnSub2();
        obj2.fnSuper();
    }
}

⚠️ 注意:这个修正后的代码对应的文件名必须是Inherit.java,不然还是会报开头的错误。

内容的提问来源于stack exchange,提问作者User2080

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:02:41