JAVA super关键字和final关键字

1、用super关键字操作被隐藏的成员变量和方法:

子类一旦隐藏了继承的成员变量,那么子类创建的对象就不再拥有该变量,该变量将归关键字super所有,同样,子类一旦隐藏了继承的方法,那么子类创建的对象就不能调用被隐藏的方法,该方法的调用由关键字super负责。
如果在子类中想使用被子类隐藏的成员变量或方法,就需要使用关键字super。
举例:

package superfinal关键字;

class Sum{
	int n;
	float f() {
		float sum=0;
		for(int i=1;i<=n;i++) {
			sum=sum+i;
		}
		return sum;
	}
}

class Average extends Sum{
	int n;
	float f() {
		float c;
		super.n=n;//调用的是被隐藏的n
		c=super.f();//调用的是被隐藏的方法f()
		return c/n;
	}
	float g() {
		float c;
		c=super.f();//调用的是被隐藏的方法f()
		return c/2;
	}
}

public class E5_7 {

	public static void main(String[] args) {
		Average aver=new Average();
		aver.n=100;
		float resultOne=aver.f();
		float resultTwo=aver.g();
		System.out.println("resultOne="+resultOne);
		System.out.println("resultTwo="+resultTwo);
	}

}

在这里插入图片描述

package superfinal关键字;

class Sum{
	int n;
	float f() {
		float sum=0;
		for(int i=1;i<=n;i++) {
			sum=sum+i;
		}
		return sum;
	}
}

class Average extends Sum{
	int n;
	float f() {
		float c;
		super.n=n;//调用的是被隐藏的n
		c=super.f();//调用的是被隐藏的方法f()
		return c/n;
	}
	float g() {
		float c;
		c=super.f();//调用的是被隐藏的方法f()
		return c/2;
	}
}

public class E5_7 {

	public static void main(String[] args) {
		Average aver=new Average();
		aver.n=100;
		float resultTwo=aver.g();
		float resultOne=aver.f();
		System.out.println("resultOne="+resultOne);
		System.out.println("resultTwo="+resultTwo);
	}

}

在这里插入图片描述

2、使用super调用父类的构造方法:

当用子类的构造方法创建一个子类对象时,子类的构造方法总是先调用父类的某个构造方法,也就是说,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。
由于子类不继承父类的构造方法,因此,子类在其构造方法中需使用super来调用父类的构造方法,而且super必须是子类构造方法中的头一条语句,即如果在子类的构造方法中,没有明显地写出super关键字来调用父类的某个构造方法,那么默认地有:super();
举例:

package superfinal关键字;

class Student{
	int number;
	String name;
    Student(){
		
	}
	Student(int number,String name){
		this.number=number;
		this.name=name;
		System.out.println("名字是"+name+" "+"学号是"+number);
	}
}

class Ustudent extends Student{
	boolean 婚否;
	Ustudent(int number,String name,boolean b){
		super(number,name);
		婚否=b;
		System.out.println("婚否="+婚否);
	}
}
public class E5_8 {

	public static void main(String[] args) {
		Ustudent zhang=new Ustudent(520,"后绍园",false);
	}

}

在这里插入图片描述
将子类的构造方法中省略super:

package superfinal关键字;

class Student{
	int number;
	String name;
    Student(){
		
	}
	Student(int number,String name){
		this.number=number;
		this.name=name;
		System.out.println("名字是"+name+" "+"学号是"+number);
	}
}

class Ustudent extends Student{
	boolean 婚否;
	Ustudent(int number,String name,boolean b){
		//super(number,name);
		婚否=b;
		System.out.println("婚否="+婚否);
	}
}
public class E5_8 {

	public static void main(String[] args) {
		Ustudent zhang=new Ustudent(520,"后绍园",false);
	}

}

在这里插入图片描述

3、final关键字:

final关键字可以修饰类、成员变量和方法中的局部变量。

(1)final类:

final class A{
  .........
}

final类不能被继承,即不能有子类。比如java.long包中的String类

(2)final方法:
不允许子类隐藏可以继承的final方法(老老实实继承,不允许做任何篡改)。

(3)常量:
如果成员变量或局部变量被修饰为final,那么它就是常量。由于常量在运行期间不允许再发生变化,所以常量在声明时没有默认值,这就要求程序在声明常量时必须指定该常量的值。
举例:

package superfinal关键字;

class A{
	final double PI=3.1415926;//PI是常量
	public double getArea(final double r) {
		//r=r+1;非法,不允许对final变量进行更新操作
		return PI*r*r;
	}
	
	public final void speak() {
		System.out.println("您好,How is everything here?");
	}
}
public class E5_9 {

	public static void main(String[] args) {
		A a=new A();
		System.out.println("面积:"+a.getArea(100));
		a.speak();
	}

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值