公共类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
相关产品推荐
相关产品推荐

