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不是指父类,而是指当前子类中父类型的数据型的特征

 

posted on 2018-08-15 15:06  董大志  阅读(320)  评论(0)    收藏  举报

导航