【Java入门学习笔记】——第九天 super关键字,final关键字

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,所以在声明常量时必须指定该常量的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章