Esta es la clase principal de demostración
public class Ongoing{
public static void main(String[] args){
ExtendsAbstract josh = new ExtendsAbstract(5, "donkey");
System.out.println(josh.toString());
}
}
esta es la clase extendida de la clase abstracta, el que está ToString método no funcionará.
public class ExtendsAbstract extends Abstract{
private String t;
public ExtendsAbstract(int y, String t){
super(y);
this.t = t;
}
public String getString(){
return this.t;
}
public int getInt(){
return super.getInt();
}
public String toString(int y){
return(/*super.toString(y)+*/"The integer is "+ y) ;
}
}
Esta es la clase abstracta
public abstract class Abstract{
private int y;
public Abstract(int y){
this.y = y;
}
public int getInt(){
return y;
}
public String toString(int y){
return("The integer is :"+y);
}
}
Cada vez que intento y el acceso al método toString de la clase extendida se limita a imprimir lo que creo que es una dirección de memoria. Yo no lo hice, incluso meterse con la clase abstracta y todavía lo hice, ¿alguien sabe por qué? También otra pregunta sobre las clases abstractas, ¿Qué ventajas que aportan, se trata sólo de la memoria? Porque no se puede tener acceso a los miembros privados de ella por lo que no es lo mismo que una clase normal, sólo más restricciones?
Decir que usted tiene clases Dad
y Son
que se definen como esto
public class OverLoadedToString {
public static void main(String[] args) {
Son son = new Son();
son.test();
son.test(90);
}
}
class Dad {
void test() {
System.out.println("Dad - test");
}
}
class Son extends Dad {
void test(int testTime) {
System.out.println("Son - test1" + testTime);
}
}
La Son
clase está extendiendo Dad
por lo que el test()
sin argumentos es heredera de Son
, al igual que su ExtendsAbstract
clase está teniendo toString()
sin argumentos que heredan de Object
la clase (cada clase de la clase de objetos de Java hereda).
A continuación, en la clase Hijo añadí nuevo método test(int testTime)
, que tiene un argumento, que las marcas test()
y test(int testTime)
diferente que se llama método overloading
. En que ExtendsAbstract
clase hay dos toString
métodos uno es el no-arg heredada y el otro ha definido.
Ahora voy a mostrar el flujo de herencia
Objeto ---> Extracto ---> ExtendsAbstract
Clase de objeto toString()
métodos imprime la dirección de memoria, podemos anularlo en nuestras clases para cambiar su definición, puede devolver cualquier cadena que desea. Sin embargo, no se ha anulado en cualquier lugar, ya sea en Abstract
clase o ExtendsAbstract
clase, por lo que en ambas clases se imprimirá la dirección de memoria.
En su Ongoing
clase a la que llama esa clase de objeto toString()
método que siempre imprime dirección de memoria. Su confusión es que usted cree que ha anulado el toString()
método, pero en realidad le acaban de sobrecargado y que está llamando al método inadecuado para su salida esperada.
Referencia: Java sobrecarga y anulando