final关键字可以修饰类、方法、属性和变量。
1、final修饰类,则该类不允许被继承。若写一个子类继承该类则编译器报错。
2、final修饰方法,则该方法不允许被覆盖(重载)。若重载则编译器报错。
3、final修饰属性,则该类的属性不会进行隐式的初始化(类的初始化必须有值,或在构造方法中)赋值,但二者只能选其一。若不初始化或者同时在属性和构造反法中都初始化则编译器报错。
4、final修饰变量,则该变量的值只能赋一次值,即变为常量。若对其再次复制则编译器报错。
super表示父类,在子类中若重载了属性和方法,想要调用父类的方法和属性可以用super.属性(方法)。注意,当创建子类对象时,先创建一个父类对象,但是如果子类直接继承了父类的属性和方法(即没有重载),则只存在一个属性和方法,即使用super只能访问到最后被修改的属性和方法。例子如下
package common;
public class Animal {
public int age;
public String name;
public Animal(){
System.out.println("Animal类执行了");
age= 20;
System.out.println(age);
}
}
package common;
public class Dog extends Animal {
<span style="color:#33CC00;">public int age;</span>
public Dog(){
System.out.println("Dog类执行了");
age = 15;
System.out.println(age);
}
public void Methord(){
System.out.println(super.age);
}
package common;
public class Initial {
public static void main(String[] agrs){
Dog dog = new Dog();
dog.name = "kitty";
dog.Methord();
}
}
程序输出结果为
Animal类执行了
20
Dog类执行了
15
20
但若把Dog类中的绿色字体去掉,则输出结果为
Animal类执行了
20
Dog类执行了
15
15
子类构造的过程中必须调用父类的构造方法,默认情况下调用父类无参的构造方法,若显式调用父类的构造方法,可以用super();写在子类构造方法中的第一行,但若父类
只提供了有参的构造方法,(系统不再提供默认无参构造方法),且在子类中没有显式调用父类的构造方法,则编译出错。