Object的超类可访问性

时间:2014-09-04 14:22:32

标签: java class super

在Java中,如果我想访问一个存在于随机对象的祖先类中的方法,我可以这样做吗?

someObject.Super.theMethodOfSuperClass();

例如:

public class A {
    public int getOne() {
        return 1;
    }
}

public class B extends A {
    public static void main(String args[]) {
        B b = new B();
        b.super.getOne(); // This..works?
    }
}

最后一行会起作用吗?

P.S。我知道如果没有superb.getOne())正常工作,我只想了解 Object.SuperClasses.Methods 的事情..

5 个答案:

答案 0 :(得分:0)

只需跳过super()并使用b.getOne()即可。来自A的getOne()将被使用!

答案 1 :(得分:0)

无需执行b.super

父类中的

方法就在那里

http://ideone.com/lyoSf3

b.getOne(); 

答案 2 :(得分:0)

子类继承父类的方法。你可以这样做:

child.parentFunction();

在这种情况下不需要“超级”。

如果你想使用super,那就是当你重写子类中的方法但想要使用父类的实现时,如下所示。

class Parent{
    public int doStuff(){
        //parent code
    }
}
//child class
class Child{
    public int doStuff(){
        super.doStuff();
        //child code
    }
}

答案 3 :(得分:0)

您不能将super关键字与子类的对象一起使用。它可以在任何类的方法体内使用。您可以http://docs.oracle.com/javase/tutorial/java/IandI/super.html引用super关键字。
类似地,如果你想要访问它,你可以直接或“覆盖那个方法。”

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

或其他方式: -

class A
{
   public int getOne()
   {
      return 1;
   }
}
class B extends A
{
   int getOne()
   {
       int i=super.getOne();   //here you can use super keyword
       //some work here
       return i;    // return what you need
   }
   public static void main(String args[])
   {
       B b = new B();
       b.getOne(); 
   }
}

答案 4 :(得分:0)

简答:不,你不能使用子类中的运算符引用super类。

Long one:如果要从超级class访问实例方法,那意味着您想要访问已经是{{的实例方法的方法1}}(除非该方法被标记为 invisile ,因为类' suptypes标记为以下访问级别classprivate)。

话虽如此,您可以通过调用其签名来访问该方法:

default

如果在您的子类中已经覆盖了此方法,您甚至可以使用public class A { public int getOne() { return 1; } } public class B extends A { public int getOneFromSuperClass() { return getOne(); // here you are calling the method #getOne from superclass A } public static void main(String args[]) { B b = new B(); b.getOneFromSuperClass(); } } 关键字引用该方法:

super

您甚至可以使用public class A { public int getOne() { return 1; } } public class B extends A { public int getOne() { return 2; // You catch it, this method returns 2 not like it seems to be doing } public int getOneFromSuperClass() { return super.getOne(); // Yes we can call the super getOne method to get the correct item } public static void main(String args[]) { B b = new B(); System.out.println(b.getOneFromSuperClass()); This will print 1 not 2 } } 引用调用super#getOne方法,因为此方法来自超类:

B

请注意,public class A { public int getOne() { return 1; } } public class B extends A { public static void main(String args[]) { B b = new B(); b.getOne(); } } 类的refence已被用于调用B类中定义的方法,原因很简单,因为此方法是固有的,然后成为A的实例方法它是在那里定义的。