有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

我可以在Java的子类中直接调用父类的实例方法吗?

我有下面两门课。我想知道我如何能够调用类B中的ClassA的实例方法,即AMessage(),而不调用创建的ClassAClassB的实例

我在想我应该调用类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();
        }
    }

共 (3) 个答案

  1. # 1 楼答案

    是的,只要父类方法应该是公共的,就可以直接从子类对象调用父类的实例方法

    你可以用这种方式打电话

    new ClassB().AMessage();
    

    它也会起作用

  2. # 2 楼答案

    使用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");
        }
    }
    
  3. # 3 楼答案

    当一个类扩展另一个类时,它会自动继承基类的可见字段和方法。我所说的可见是指可访问的成员。私有成员不会被继承。了解有关http://www.tutorialspoint.com/java/java_inheritance.htm中继承的更多信息

    因此,如果您有一个类ClassA,它有一个方法a消息,如下所示:

    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。除了实例方法之外,您还可以像那样调用静态方法。(当然,您可以而不是在静态方法中调用实例方法。)

    作为另一个答案,我想建议(虽然这与问题无关,但这是一个好的做法),您应该以大写字母开头命名类(实例或静态)的任何方法。如果仍然这样命名,它不会生成任何编译器错误,但会影响可读性。我写这样的名字只是为了和你的问题有关