当前位置: 首页 > 知识库问答 >
问题:

如何确保超类对象不为null

壤驷鸿祯
2023-03-14

我有两个类,一个是另一个的子类。我想这样做,即使实际对象是子类的实例,超类也可以执行其原始方法。

下面的代码打印hello null,然后输出错误:无法调用“A.doThis()”,因为“this.object”为null

public class A {
  A object;

  public void doSomething(){
    System.out.println("hello " + object);
    object.doThis();
  }

  public void doThis(){
    System.out.println("Did this");
  }
}
public class B extends A{
  B object;

  public static void main(String[] args){
    B b = new B();
    b.create();
  }

  public void create(){
    object = new B();
    object.doSomething();
  }
}

我知道在类A中,对象实际上并不是在任何地方创建的,这就是为什么它可能是空的。我想知道我怎么才能让它不是。

共有1个答案

喻高寒
2023-03-14

如果要在类的某个方法中引用该类的实例,请使用this

如果您想确保超类中的方法保持其原始实现,并且永远不会被子类重写,那么请将其设置为final。

如果这不是你想要的,那么我不认为你试图做的是实际可行的。

public class A {
  public final void doSomething(){
    System.out.println("hello " + this);
    this.doThis();
  }

  public final void doThis(){
    System.out.println("Did this");
  }
}

public class B extends A{
  public static void main(String[] args){
    B b = new B();
    b.create();
  }

  public void create(){
    this.doSomething();
  }
}
 类似资料:
  • 问题内容: 我有2个类,分别称为超类和子类,我试图将子类对象转换为超类,但是当我想使用超类的子类对象时,它似乎不起作用。请帮忙解释。谢谢。这些是代码: 当我尝试使用子类的displaySub()时出现错误 问题答案: 超类不能知道子类方法。 这样考虑: 你有超一流的 你有两个子类,即:, 两个子类将具有相同的特征,例如 该超意识到这些,因为所有S能说话(即使它不知道此操作的确切机制) 一但可以做的

  • 问题内容: 如果class 和class 扩展了class 并且我有一个对象类型或,我如何确定它是实例的哪种类型? 问题答案:

  • 问题内容: 为什么对象类是Java中的超类? 问题答案: 这是一个好问题。Java选择使单个类成为所有内容的最终父类,以便有一种简单的方法来传递任意对象,而无需知道其类型(即,您可以使用Object的声明类型来引用每个单个项目在类型系统中,甚至使用其包装器类的基本体也是如此。但是,存在诸如C ++之类的OOP语言,没有像Java中那样的通用基类。拥有通用基类的另一个好处是,对于超类,处理超类的逻辑

  • 我理解超类/子类之间的关系以及强制转换是如何工作的。但是,我的问题是,如果知道中间有一个类,你能把一个超类转换成一个特定的子类吗?例如,如果我有一个动物类对象包含一个BigDog对象,我可以将该对象强制转换为Dog吗?如果BigDog中有Dog中不存在的方法怎么办? 简而言之,你当然可以说超类对象是子类对象,但为什么你可以反转呢? 转念一想, Java在调用方法时检查的是:引用(DOG)是否有引用

  • 问题内容: 我有一个奇怪的Java问题: 据我们所知: 所有Java类都扩展 所有Java类都无法扩展 然后,必须扩展,它本身就是,因此,它应该是不可能的。如何用Java实现对象? 问题答案: 是第一个规则的例外,并且没有超类。从JLS3 8.1.4开始 : extend子句不能出现在Object类的定义中,因为它是原始类并且没有直接的超类。 您也可以通过反射尝试一下:

  • 问题内容: 我公司的员工需要通过我编写的程序来修改SQL Server数据库中的数据。该程序首先使用Windows身份验证,我要求DBA授予该特定用户对该数据库的写访问权限。 他们不愿意这样做,而是给了 我的 Windows用户帐户写权限。 因为我信任这个人,但不足以让他在打开会话的情况下工作90分钟,所以我只向程序添加一个登录提示,询问用户名和密码的组合,然后使用它登录SQL Server。我将