Java super关键字
La palabra clave Super es similar a esta, que se utiliza para representar una instancia de la clase actual, y Super se usa para representar una clase principal.
Super se puede usar en subclases para obtener variables y métodos de miembros de la clase principal a través de puntos (.). super 也可以用在子类的子类中,Java 能自动向上层类追溯。
Se llama al comportamiento de la clase principal, como si el comportamiento fuera el comportamiento de esta clase, y el comportamiento de llamadas no tiene que suceder en la clase principal, puede rastrear automáticamente la clase alta.
super 关键字的功能:
调用父类中声明为private 的变量。
点取已经覆盖了的方法。
作为方法名表示父类构造方法。
调用隐藏变量和被覆盖的方法
Public Class Demo {public static void main (string [] args) {perra obj = new Dog (); Declarar un método getter public string getDesc () {return Desc; ); / Llame al método de la clase principal. ; }}
Resultados de ejecución:
Animals can moveDogs can walk and runPlease remember: Animals are human's good friends
El método Move () también se puede definir en algunas clases de antepasados, como la clase principal de la clase principal.
Para llamar a las variables ocultas de la clase principal a través de Super, debe declarar el método Getter en la clase principal, porque los miembros de los datos declarados como privados no son visibles para la subclase.
调用父类的构造方法
在许多情况下,使用默认构造方法来对父类对象进行初始化。当然也可以使用super 来显示调用父类的构造方法。
public class Demo{ public static void main(String[] args) { Dog obj = new Dog("花花", 3); obj.say(); }}class Animal{ String name; public Animal(String name){ this.name = name; }}class Dog extends Animal{ int age; public Dog(String name, int age){ super(name); this.age = age; } public void say(){ System.out.println("我是一只可爱的小狗,我的名字叫" + name + ",我" + age + "岁了"); }}
Resultados de ejecución:
我是一只可爱的小狗,我的名字叫花花,我3岁了
注意:无论是super() 还是this(),都必须放在构造方法的第一行。
Vale la pena señalar:
Se llama otro constructor en el constructor, y la acción de la llamada debe colocarse en la posición inicial.
No se puede llamar a un constructor dentro de ningún método que no sea un constructor.
Solo se puede llamar a un constructor dentro de un constructor.
如果编写一个构造方法,既没有调用super() 也没有调用this(),编译器会自动插入一个调用到父类构造方法中,而且不带参数。
最后注意super 与this 的区别:super 不是一个对象的引用,不能将super 赋值给另一个对象变量,它只是一个指示编译器调用父类方法的特殊关键字。
Java instanceof 运算符<br />多态性带来了一个问题,就是如何判断一个变量所实际引用的对象的类型。 C++使用runtime-type information(RTTI),Java 使用instanceof 操作符。
instanceof 运算符用来判断一个变量所引用的对象的实际类型,注意是它引用的对象的类型,不是变量的类型。请看下面的代码:
public final class Demo{ public static void main(String[] args) { // Reference the instance of People class People obj = new People(); if(obj instanceof Object){ System.out.pr intln("I am an object" ); } if(obj instanceof People){ System.out.println("I am a human"); } if(obj instanceof Teacher){ System.out.println("I am a teacher"); } if (obj instanceof President){ System.out.println("I am the principal"); } System.out.println("----------------"); // Dividing line// Examples refer to Teacher class obj = new Teacher(); if(obj instanceof Object){ System.out.println("I am an object"); } if(obj instanceof People){ System.out.println( "I am a human"); } if(obj instanceof Teacher){ System.out.println("I am a teacher"); } if(obj instanceof President){ System.out.println("I am the principal" ); } }}class People{ } : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :::::::::::::::::: para::: ::::::::::::::::::::::::::::::: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : class Teacher extends People{ }class President extends Teacher{ }
Resultados de ejecución:
I am an object I am a human ------------------------------------------ -------------------------------------------------- ----------------------------
可以看出,如果变量引用的是当前类或它的子类的实例,instanceof 返回true,否则返回false。