java语言基础--supper
super代表的是当前子类对象中的父类型特征
何时用:
- 子类和父类中有同名的某个数据
- 子类重写了父类的某个方法,为了调用父类的这个方法,就要用到super
- super可以调用父类的构造方法
举个栗子:
Animal.java
public class Animal { public String name = "动物"; String color; String category; public Animal() { System.out.println("Animal 中的无参构造方法"); } public Animal(String color, String category) { this.color = color; this.category = category; } public void eat() { System.out.println("动物吃饭"); } }
Dog.java
public class Dog extends Animal{ public String name ="旺财"; public Dog() { super("土豪金","西伯利亚雪橇犬"); System.out.println("Dog中的构造方法"); } public void eat() { System.out.print("旺财吃饭"); } public void m1() { System.out.println(super.name); System.out.println(name); super.eat(); eat(); } }
Test.java
public class Test { public static void main(String[] args) { Dog d = new Dog(); d.m1(); System.out.println(d.color); System.out.println(d.category); } }
打印结果:
Dog中的构造方法
动物
旺财
动物吃饭
旺财吃饭土豪金
西伯利亚雪橇犬
如果我们改变下Dog.java:
public class Dog extends Animal{ public String name ="旺财"; public Dog() { // super("土豪金","西伯利亚雪橇犬"); System.out.println("Dog中的构造方法"); } public void eat() { System.out.println("旺财吃饭"); } public void m1() { System.out.println(super.name); System.out.println(name); super.eat(); eat(); } }
注释掉super的冬冬
打印结果:
Animal 中的无参构造方法 Dog中的构造方法 动物 旺财 动物吃饭 旺财吃饭 null null
就打印出了Animal中的无参构造方法
是这样的:
若不在子类中指明调用的构造方法,那么,子类会被默认的调用父类的无参构造方法
super不是指父类,而是指当前子类中父类型的数据型的特征
浙公网安备 33010602011771号