Tag: 超级

对super()的调用必须是构造函数体中的第一个语句

我正在编写一个LoginRequest类的构造函数,该类扩展了一个名为JsobObjectRequest的类(来自Android中的Volley框架,但这与问题完全无关) 使用此代码: public LoginRequest(String username, String password, Response.Listener responseListener, Response.ErrorListener errorListener) { Boolean hasCredentials=(username!=null && password!=null); int method=hasCredentials? Method.POST:Request.Method.GET; super(method, API_URL_LOGIN, null, responseListener, errorListener); this.username=username; this.password=password; } 我得到错误:调用super()必须是构造函数体中的第一个语句 相反,这段代码编译得很好: public LoginRequest(String username, String password, Response.Listener responseListener, Response.ErrorListener errorListener) { super((username!=null && password!=null)? Method.POST:Request.Method.GET, API_URL_LOGIN, null, responseListener, errorListener); this.username=username; this.password=password; } 但这不是有效的完全相同的事情吗? 在这两种情况下,在调用超级构造函数之前,根据传递给子类构造函数的参数值,进行几个简单的计算。 为什么编译器能够编译第一个例子,因为它可以编译第二个例子? call-super-constructor-must-first-statement语句规范是否比它需要的更简单,或者我错过了什么? 编辑 […]

访问非重写的超类方法时使用’super’关键字

我试图在Java中获取inheritance权并且已经了解到当在子类中重写方法(和隐藏字段)时,仍然可以使用“super”关键字从超类中访问它们。 我想知道的是,’super’关键字是否应该用于非重写方法? 有没有区别(对于非重写方法/非隐藏字段)? 我在下面举了一个例子。 public class Vehicle { private int tyreCost; public Vehicle(int tyreCost) { this.tyreCost = tyreCost; } public int getTyreCost() { return tyreCost; } } 和 public class Car extends Vehicle { private int wheelCount; public Vehicle(int tyreCost, int wheelCount) { super(tyreCost); this.wheelCount = wheelCount; } public int getTotalTyreReplacementCost() { return getTyreCost() * […]

扩展通用抽象类和正确使用超级

public abstract class AbstractTool { protected ArrayList ledger; public AbstractTool() { ledger = new ArrayList(); } public AT getToolAt(int i) { return ledger.get(i); } // More code Which operates on Ledger … } public class Tool extends AbstractTool { public Tool() { super(); } } 如何正确调用super将Tool的ATgenerics传递给AbstractTool构造函数? 当我宣布Tool (Say, Tool )时,似乎无论我选择AT是什么,我总是得到一个AbstractThing而不是Thing 。 这似乎打败了仿制药的目的…… 帮帮我?

需要覆盖方法才能调用super

我希望当子类重写父类中的方法时,在该子方法中调用super.method() 。 有没有办法在编译时检查这个? 如果没有,当发生这种情况时,我将如何抛出运行时exception?

为什么我不能在静态上下文中使用“super”变量,即使“super”指的是父类而不是类实例,不像“this”?

我说的是java语言。 变量“this”在类中使用时,引用该类的当前实例,这意味着您不能在静态方法中使用“this”。 但是,“super”,当在类中使用时,指的是该类的超类,而不是超类的实例,这应该意味着你可以在静态方法中使用“super”。 但事实certificate你不能。 一个可能的解释是说“超级”也指超类的一个实例,但我不明白为什么它应该……

Java如何调用盛大父母的方法?

可能重复: 为什么是super.super.method(); Java不允许? 假设我有3个A , B和C ,每个类都扩展了前一个。 如果B也实现myMethod如何从C.myMethod()调用A.myMethod()的代码? class A { public void myMethod() { // some stuff for A } } class B extends A { public void myMethod() { // some stuff for B //and than calling A stuff super.myMethod(); } } class C extends B { public void myMethod() { // some […]

超级关键字没有扩展到超类

有一个简单的程序,在构造函数中,super()被调用而没有扩展到超类,我无法理解在这种情况下会做什么呢? public class Student { private String name; private int rollNum; Student(String name,int rollNum){ super();// I can not understand why super keyword here. this.name=name; this.rollNum=rollNum; } public static void main(String[] args) { Student s1 = new Student(“A”,1); Student s2 = new Student(“A”,1); System.out.println(s1.equals(s2)); } }

强制基本方法调用

Java或C#中是否有强制inheritance类来调用基础实现的构造? 你可以调用super()或base()但是如果没有调用它可能会抛出编译时错误吗? 那会很方便.. – 编辑 – 我主要是对重写方法感到好奇。

构造函数中的super()

我正在阅读一些代码。 在构造函数中它有super()但是类实现了接口,当然它没有构造函数。 那么它指的是哪个super()? public class BoundingBox implements IBoundingVolume { public BoundingBox() { super(); mTransformedMin = new Number3D(); mTransformedMax = new Number3D(); mTmpMin = new Number3D(); mTmpMax = new Number3D(); mPoints = new Number3D[8]; mTmp = new Number3D[8]; mMin = new Number3D(); mMax = new Number3D(); for(int i=0; i<8; ++i) { mPoints[i] = new Number3D(); mTmp[i] […]

从静态方法调用超级方法

是否可以从子静态方法调用超静态方法? 我的意思是,以通用的方式,到目前为止,我有以下内容: public class BaseController extends Controller { static void init() { //init stuff } } public class ChildController extends BaseController { static void init() { BaseController.loadState(); // more init stuff } } 它的工作原理,但我想以通用的方式做,比如调用super.loadState(),这似乎不起作用……