我可以在Java的子类中直接调用父类的实例方法吗?
我有下面两门课。我想知道我如何能够调用类B中的ClassA
的实例方法,即AMessage()
,而不调用创建的ClassA
或ClassB
的实例
我在想我应该调用类B中的ClassA
的实例方法,即AMessage()
,如下所示:
new ClassA().AMessage(); //no compile error
new ClassB().Amessage(); //no compile error
父类(ClassA.java)
public class ClassA {
public void AMessage(){
System.out.println("A Message");
}
}
子类(ClassB.java)
public class ClassB extends ClassA{
public void BMessage(){
AMessage(); //no compile error
}
public static void main(String[] args){
new ClassB().BMessage();
}
}
# 1 楼答案
是的,只要父类方法应该是公共的,就可以直接从子类对象调用父类的实例方法
你可以用这种方式打电话
它也会起作用
# 2 楼答案
使用
super
关键字调用基类方法。请检查此项以供参考- http://docs.oracle.com/javase/tutorial/java/IandI/super.html或者你也可以这样做-
# 3 楼答案
当一个类扩展另一个类时,它会自动继承基类的可见字段和方法。我所说的可见是指可访问的成员。私有成员不会被继承。了解有关http://www.tutorialspoint.com/java/java_inheritance.htm中继承的更多信息
因此,如果您有一个类ClassA,它有一个方法a消息,如下所示:
ClassB扩展了ClassA,如下所示:
ClassB自动继承ClassA的成员,也就是说,它们的行为就好像它们是ClassB本身的成员一样。这就是为什么我们可以在没有任何实例的情况下在ClassB中调用ClassA的实例方法,因为它们也属于ClassB。除了实例方法之外,您还可以像那样调用静态方法。(当然,您可以而不是在静态方法中调用实例方法。)
作为另一个答案,我想建议(虽然这与问题无关,但这是一个好的做法),您应该不以大写字母开头命名类(实例或静态)的任何方法。如果仍然这样命名,它不会生成任何编译器错误,但会影响可读性。我写这样的名字只是为了和你的问题有关