1.用super操作被子类隐藏的成员变量和方法
当我们在子类中隐藏了父类的成员变量和方法后,还想操作被隐藏掉的父类的成员变量和方法时:就用到了super关键字
子类一旦隐藏了继承的成员变量,那么子类创建的对象就不再拥有该变量,该变量归关键字super所拥有
class A{
int n;
public int getSum() {
int sum=0;
for(int i=1;i<=n;i++) {
sum+=i;
}
return sum;
}
}
class B extends A{
int n;
public int getSum() {
super.n=n;//操作A类中的n,把B类中的100赋值给A类中的n
return super.getSum();//操作A类中的方法,计算从1加到100
}
}
public class Array{
public static void main(String[] args) {
B test1=new B();
test1.n=100;
int ans=test1.getSum();
System.out.println(ans);
}
}
2.用super调用父类的构造方法
要知道:子类并不会继承父类的构造方法
1.如果子类的构造方法没有明显地指明使用父类的哪一个构造方法,子类就调用父类的不带参数的构造方法
2.子类在其构造方法中需要使用super关键字来调用父类的构造方法,而且super必须是子类构造方法的头一条语句
class Student{
int age;
String name;
Student(){
}
Student(int age,String name){
this.age=age;
this.name=name;
System.out.println("姓名和年龄为:"+name+" "+age);
}
}
class UniversityStudent extends Student{
boolean marrage;
UniversityStudent(int age,String name,boolean marrage){
super(age,name);//调用父类的构造方法
this.marrage=marrage;
System.out.println("婚姻状况:"+marrage);
}
}
public class Array{
public static void main(String[] args) {
UniversityStudent stu=new UniversityStudent(20,"孙泽坤",false);
}
}
这个例子中,super调用的时父类的构造方法Student(int age,String name)
下面我们对这个程序做一点小小的改进
class Student{
int age;
String name;
}
class UniversityStudent extends Student{
boolean marrage;
UniversityStudent(int age,String name,boolean marrage){
//不写,等同于写了super();因为父类没有构造方法,也算有了一个默认的空构造方法
this.marrage=marrage;
System.out.println("婚姻状况:"+marrage);
}
}
public class Array{
public static void main(String[] args) {
UniversityStudent stu=new UniversityStudent(20,"孙泽坤",false);
}
}
这样仍然可以编译运行,这就印证了“如果子类的构造方法没有明显地指明使用父类的哪一个构造方法,子类就调用父类的不带参数的构造方法”
当需要在父类中定义多个构造方法时,应当包含一个不包含参数的构造方法,以防子类省略super时出错。就像第一个代码一样,包含一个不包含参数的的构造方法Student(){}。
3.final关键字
final关键字可以修饰类、成员变量、和方法中的局部变量。
(1).final关键字修饰类:
被final类修饰的类不能有子类,例如Java在java.lang包中提供的String类对于编译器和解释器的运行有着重要的作用,Java不允许用户扩展String类,因此String类被Java修饰为final类
(2).final修饰方法:
被final修饰的父类中的方法不允许子类重写,子类只能老老实实继承父类被final修饰的方法
(3).final修饰变量:
被final修饰的变量(成员变量或者局部变量)称为常量,常量在运行期间不允许发生变化,所以声明常量时,他不会具有默认值0或者是null,所以在声明常量时必须指定该常量的值。