我正在尝试掌握Java中的继承窍门,并且了解到当覆盖子类中的方法(和隐藏字段)时,仍然可以使用“super”关键字从父类(superclass)访问它们。我想知道的是,“super”关键字是否应该用于非覆盖方法?有什么区别(对于非覆盖方法/非隐藏字段)吗?我在下面整理了一个示例。publicclassVehicle{privateinttyreCost;publicVehicle(inttyreCost){this.tyreCost=tyreCost;}publicintgetTyreCost(){returntyreCost;}}和publicclassCarextendsVehic
我只想知道为什么我们在自己创建的自定义异常中调用super。publicclassMyExceptionextendsException{publicMyException(Stringmessage){super(message);}}这里调用super(message)有什么用 最佳答案 由于派生类总是以基类为模板,因此在构造派生对象时,首先需要对基类进行初始化。默认情况下,如果没有super调用,Java将使用默认(无参数)构造函数来创建基类。如果你想使用不同的构造函数,你必须使用super来传递你想要的参数并调用正确的构造函
我是java的新手,我正在做一个简单的程序,但我不知道为什么当我尝试使用super时我的程序会出错...有人可以解释我还是什么是我的错误,因为它不接受super.myCoord()我应该更改或添加什么?publicclassmyCoord{privatedoublecoorX,coorY;publicmyCoord(){coorX=1;coorY=1;}publicmyCoord(doublex,doubley){coorX=x;coorY=y;}voidsetX(doublex){coorX=x;}voidsetY(doubley){coorY=y;}doublegetX(){ret
我正在使用将本地文件作为输入的CSVReader类。但是现在,我需要能够读取本地文件以及具有URL路径的文件(如http://example.com/example.txt)。为此,我想从CSVReader派生一个类来标识文件是本地文件还是URL,然后在构造函数的第一行中使用super()将InputStream传递给父级。这样做的优雅方式是什么?publicclassFileReaderextendsCsvReader{publicFileReader(){if(fileName!=null){if(fileName.trim().startsWith("http:")){//iti
我想管理类的ArrayList。例如,我有3种类型的过滤器:TextFilter、DurationFilter和扩展Filter的TimeFilter。这似乎是正确的:Listfilters=newArrayList();filters.add(TextFilter.class);filters.add(DurationFilter.class);filters.add(TimeFilter.class);但是现在我想用来限制ArrayList类型Listfilters=newArrayList();filters.add(TextFilter.class);filters.add(D
我正在尝试导入包java.util.function但我不断收到以下错误:FP.java:2:error:cannotfindsymbolimportjava.util.function;^symbol:classfunctionlocation:packagejava.util我已确认我使用的是jdk1.8.0_11(使用javac-version)。 最佳答案 这不是你导入包的方式,这个importjava.util.function;应该是importjava.util.function.*;导入java.util.funct
我正在尝试使用反射从父类(superclass)型引用变量中获取注释详细信息,以使该方法接受所有子类型。但是isAnnotationPresent()返回false。与其他注解相关的方法相同。如果用于确切的类型,则输出符合预期。我知道注释信息将在对象上可用,即使我通过父类(superclass)型引用也是如此。@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE})public@interfaceTable{Stringname();}@Table(name="some_table")publicclassSomeEn
我有以下类(class):classfoo{publicvoida(){print("a");}publicvoidb(){a();}}classbarextendsfoo{publicvoida(){print("overwrittena");}}当我现在调用bar.b()时,我希望它调用foo中重写的方法a()。但是,它确实会打印“a”。 最佳答案 你的两个类在不同的包中吗?你的foo类方法是声明为public、protected、private还是packagelocal?显然,如果他们是私有(private)的,这将行不通。
我看到一些Java示例使用this关键字来获取父类(superclass)方法。示例:this.superClassMethod()。通常情况下我们会使用super。有人可以举例说明为什么开发人员使用this而不是super吗?谢谢你。 最佳答案 this.method()和super.method()没有区别,直到method()得到在调用者的类中覆盖。例如,用classSuperClass{publicvoidmethod(){System.out.println("SuperClass");}}classSubClassext
这个顺序看起来很奇怪,因为在常规Java中,返回类型总是首先指定。如:publicstaticdoublesum(Iterablenums){...}那么,为什么在Function和BiFunction类中选择以相反的方式指定它们呢?如:interfaceFunctioninterfaceBiFunction我不是在这里征求关于哪个更好的意见,但具体来说:a)优先选择一个顺序是否有任何技术或其他(非风格)好处?还是随意选择?b)是否有人知道任何书面解释,或来自权威来源的任何陈述原因,为什么选择一个而不是另一个?旁白:如果扩展到更高层次,这个顺序似乎更加奇怪。例如,一个假设的QuadFu