这段时间在学习Java编程语言,大二的时候学校开过Java语言的课程。当时对Java并没有很大的兴趣,对于一个在大学之前从未接触过编程语言的人来说,当时觉得学习面向对象编程语言简直就是折磨。虽然语法基础和之前学习过的C语言差不太多,但是到了有关面向对象的三大特性,以及Java中更加深入的内容之后,自己那种学习Java的底气渐渐被打磨掉了。
而现在重新着手学习Java的原因也是因为自己找了一份与Java开发相关性很大的一份工作,在这样的压力下,化压力为动力开始自己的学习之路。最主要的原因是,经过两年的学习,自己对于面向对象也有了一定的认识,不像之前那样一无所知,听到面向对象就一头雾水了。在这段时间的学习中,感悟比较深的就是, 你之前所做的一切努力再后来的时间李都会被体现出来,若没有中间这段时间的沉淀,我想我现在也不会那么顺畅的学习Java的内容。
今天学到了Java中super关键字。通过学习,以下是我对super的理解:
1、super在子类中使用,表示调用父类的属性及方法。例如:
父类:
public class Animal {
public int age = 10;
public String name;
public void eat(){
System.out.println("动物具有吃东西的能力");
}
public Animal(){
System.out.println("animal");
age = 15;
}
}
子类:
public class Dog extends Animal {
public int age = 20;
public String name = "dog";
public void eat(){
System.out.println("狗具有吃东西的能力");
}
public Dog(){
System.out.println("dog");
}
public void method(){
System.out.println(super.age);
super.eat();
}
}
其中子类中super.age表示调用父类的属性age;super.eat()表示调用父类方法。
2、在子类的构造方法中会默认的隐式调用父类的构造方法,即隐式调用super()方法。若程序员在子类的构造方法中现实的调用父类构造方法,则super()应在方法最开始调用。如下:
public class Dog extends Animal {
public int age = 20;
public String name = "dog";
public void eat(){
System.out.println("狗具有吃东西的能力");
}
public Dog(){
super();
System.out.println("dog");
}
public void method(){
System.out.println(super.age);
super.eat();
}
}
3、若在父类中显示声明带参数的构造方法,则子类中就不会自动的调用父类的无参构造方法。因为此时在父类中显示声明带有参数的构造方法便不会自动创建默认的无参构造方法。