我有两个类,一个是另一个的子类。我想这样做,即使实际对象是子类的实例,超类也可以执行其原始方法。
下面的代码打印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中,对象实际上并不是在任何地方创建的,这就是为什么它可能是空的。我想知道我怎么才能让它不是。
如果要在类的某个方法中引用该类的实例,请使用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。我将