Java中compareTo()与getYear()方法未找到的解决方法问询
嘿,刚学Java碰到这种问题太正常啦,我给你一步步讲清楚原因和解决办法!
为啥会出现这两个错误?
1. compareTo()方法找不到
Java里不是随便哪个类都能直接用compareTo()的,得先让类实现Comparable接口才行!你的Desktop是抽象类,现在没实现这个接口,那它的子类Macintosh、Windows自然也没有这个方法,编译器肯定报错说找不到。
2. getYear()方法找不到
这个问题要么是你的Desktop抽象类里根本没定义getYear()方法,要么是定义了但访问权限不够(比如设成了private,子类拿不到)。父类没有的方法,子类又没实现的话,调用的时候肯定找不到呀。
简单可行的解决步骤
第一步:搞定compareTo()的问题
让你的Desktop抽象类实现Comparable<Desktop>接口,然后要么在父类里定义抽象的compareTo让子类实现,要么直接在父类写通用的比较逻辑:
// 先让Desktop实现Comparable接口 public abstract class Desktop implements Comparable<Desktop> { // 你的其他成员变量和方法 // 方式一:定义抽象方法,让子类自己写比较逻辑 @Override public abstract int compareTo(Desktop otherDesktop); // 方式二:如果所有桌面都按年份比较,直接在父类实现 /* @Override public int compareTo(Desktop otherDesktop) { // 这里要确保getYear()能正常调用,所以先搞定第二个问题哦 return Integer.compare(this.getYear(), otherDesktop.getYear()); } */ }
如果用方式一,记得在Macintosh和Windows里实现compareTo:
public class Macintosh extends Desktop { // 你的其他代码 @Override public int compareTo(Desktop other) { // 写你自己的比较逻辑,比如按年份、型号等 return Integer.compare(this.getYear(), other.getYear()); } }
第二步:搞定getYear()的问题
先检查Desktop类里有没有getYear(),没有的话赶紧加上,而且要设成public或者protected(子类能访问的权限):
public abstract class Desktop implements Comparable<Desktop> { private int productionYear; // 假设你有存储年份的变量 // 给子类提供获取年份的方法 public int getYear() { return productionYear; } // 如果每个子类的年份获取逻辑不一样,就写成抽象方法 // public abstract int getYear(); // 其他代码... }
要是子类自己有年份变量,那也要在子类里实现getYear()方法,保证调用的时候能拿到正确的年份值。
小提醒
刚学Java要记住两个关键点:
- 要使用
compareTo(),类必须实现Comparable接口,这是Java的规则哦; - 父类的方法要给子类留访问权限,不然子类调用不了~
内容的提问来源于stack exchange,提问作者Tanay Poddar
相关产品推荐
相关产品推荐

