2014-09-04 1 views
0

В Java, если я хочу достичь метода, который существует в классах предков случайного объекта, могу ли я это сделать?a super class accessibilty объекта

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? 
    } 
} 

Will последней строки работы?

P.S. Я знаю, что без super (b.getOne()) работает правильно, я просто хочу понять Object.SuperClasses.Methods вещь ..

+0

Вы спрашиваете или говорите? – Devavrata

+0

На каком языке вы спрашиваете? – FatalError

+0

@Devavrata спрашивает, FatalError JAVA –

ответ

0

Просто пропустить super() и использовать b.getOne(). getOne() от A будет использован!

+0

Я знаю, я просто написал вам быстрый пример, дело не в том, что код работает, а супер, не просто принадлежит конструкторам, вы можете сделать super.getOne(); например, и это будет работать правильно! –

0

нет необходимости делать b.super

методы в родительском классе просто есть

http://ideone.com/lyoSf3

b.getOne(); 
0

Дочерний класс наследует методы родительского класса. Вы можете сделать что-то вроде этого:

child.parentFunction(); 

В этом случае не нужно «супер».

Если вы хотите использовать супер, это было бы, если вы переопределите метод в дочернем классе, но хотите использовать реализацию из родительского класса, как показано ниже.

class Parent{ 
    public int doStuff(){ 
     //parent code 
    } 
} 
//child class 
class Child{ 
    public int doStuff(){ 
     super.doStuff(); 
     //child code 
    } 
} 
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(); 
    } 
} 
0

Короткий ответ: Нет, вы не можете ссылаться на super класс с помощью . Оператор из подкласса.

Long один: Если вы хотите получить доступ к методу экземпляра из супер class, что неявный означает, что вы хотите получить доступ к методу, который уже метод экземпляра вашей class (если этот метод не помечен как invisile для подписок классов, отмеченных таким образом одним из следующих уровней доступа private или 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 классе, просто потому, что этот метод унаследовал, а затем становится метод экземпляра B, как это было определено там.

+0

Я ценю ваши усилия, но мой вопрос: b.super.getOne() работает или нет! –

+0

Я выставил несколько лиц субъекта, предполагая, что вы уже поняли, что он не будет работать самостоятельно, и вы пришли искать объяснения, а не ответ «да/нет». – tmarwen