我有以下两个班级。我想知道如何在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();
}
}
答案 0 :(得分:0)
使用super
关键字来调用基类方法。检查这个以供参考 -
http://docs.oracle.com/javase/tutorial/java/IandI/super.html
public class ChildClass extends BaseClass{
public static void main(String[] args){
ChildClass obj = new ChildClass();
obj.Message();
}
public void Message(){
super.Message();
}
}
class BaseClass {
public void Message(){
System.out.println("Base Class called");
}
}
或者您也可以这样做 -
public class ChildClass extends BaseClass{
public static void main(String[] args){
new ChildClass().Message();
}
}
class BaseClass {
public void Message(){
System.out.println("Base Class called");
}
}
答案 1 :(得分:0)
是的,您可以从子类对象直接调用父类的实例方法,前提是父类方法应该是公共的
你可以这样打电话
new ClassB().AMessage();
它也会起作用
答案 2 :(得分:0)
当一个类扩展另一个类时,它会自动继承基类的可见字段和方法。可见我指的是可访问的成员。私人成员不是继承的。详细了解http://www.tutorialspoint.com/java/java_inheritance.htm
中的继承因此,如果你有一个类ClassA,它有一个像这样的方法AMess:
public class ClassA{
public void AMessage(){
System.out.println("A message");
}
}
和ClassB扩展了ClassA,如下所示:
public class ClassB extends ClassA{
public void BMessage(){
AMessage();
}
public static void main(String[] args){
new ClassB().BMessage();
}
}
ClassB自动继承ClassA的成员,即它们就像是ClassB本身的成员一样。这就是为什么我们可以在没有任何实例的情况下在ClassB中调用ClassA的实例方法,因为它们也属于ClassB。除了实例方法之外,您还可以调用类似的静态方法。 (但是当然你可以不在静态方法中调用实例方法。)
作为一个额外的答案,我想建议(虽然它与问题无关,但这是一个好习惯)你应该不命名任何类的方法(实例或静态)以大写字母开头。如果你仍然这样命名,它不会产生任何编译器错误,但它会影响可读性。我写了这样的名字只是为了与你的问题有关。