2016-04-23 11 views

Antwort

1

Es gibt keine Beschränkung der Überladung innerhalb von Unterklassen. Zum Beispiel könnte ich haben:

public class A { 
public String test(String input) { 
    //do something 
} 
} 

public class B extends A { 
public String test(String input, String input2) { 
    //do something 
} 
} 

B testInstance = new B(); 
testInstance.test("one", "two"); 
testInstance.test("one"); 

Für Fragen wie diese können Sie es immer selbst ausprobieren und herausfinden.

1

In einem Wort - ja. Sie können Methoden in einer Unterklasse überladen. Z.B .:

public class Parent { 
    public void print(String s) { 
     System.out.println("That was a string: " + s); 
    } 
} 

public class Child { 
    public void print(int i) { 
     System.out.println("That was an int: " + i); 
    } 
} 

public class Main { 
    public static void main(String[] args) { 
     Child c = new Child(); 
     c.print("hello"); // prints "That was a string: hello" 
     c.print(7); // prints "That was an int: 7" 
    } 
} 
0

Wenn Sie eine Methode überlasten, es ist im Grunde eine völlig neue Methode ohne direkte Verbindung mit dem anderen mit dem gleichen Namen zu schaffen, ist es die Signatur, die zählt. Wenn Sie also eine Methode in der Unterklasse erstellen, die eine andere Signatur hat, wird sie vom Compiler als andere und neue Methode für diese Klasse behandelt, so dass sie nicht mit der Methode der Superklasse in Beziehung steht.

0

Überladen kann in Unterklassen möglich sein. Wenn Sie eine Methode mit demselben Namen wie in der Superklasse mit einem anderen Parameter erstellen, wird diese als separate Methode behandelt. Die Subklasse wird auch Methoden von der Superklasse haben, so dass die Methode, die aufgerufen werden soll, zur Kompilierzeit basierend auf dem Parametertyp entschieden wird. Welche Methode aufgerufen wird, wird zur Kompilierzeit deklariert, weshalb sie als statische Polymorphie bezeichnet wird. Hier ist das Beispiel -

Class A{ 
    void m1(int x){ 
     System.out.println("m1 in A"); 
    } 
} 
Class B extends A 
{ 
    void m1(String str) 
    { 
     System.out.println("m1 in B"); 
    } 
} 
Public Class Test 
{ 
    public static void main(String[] aa) 
    { 
     B b = new B(); 
     b.m1(10); 
     b.m1("Hello World!!") 
    } 
} 

Hoffe, das wird helfen.