浅谈Super、final、this

Final

Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。

下面见一些示例:

public class Final {
	
	final int a,c,b;	//没初始化的常量是无法使用
	final int d=5;
	
	public Final() {
		a=1;
	}
	
	{
		c=2;
		b=3;
	}
	
	public static void main(String[] args) {
		a++;	//常量无法被改变
	}
	
	public void function(final int m) {
		m++;	//因为常量在方法调用的时候已经被初始化,所以这里将不能对值改变
	}
	
	final String name() {
		return "帅帅哒";		//常量方法,可以被子类继承,但是不能被重写
	}
	
}
总结

1.final修饰的类不能被有子类,也就是不能实现继承
2.final修饰的方法,可以被子类继承,但是不能被子类重写
3.final修饰的变量,一但赋值就不能改变,无论是函数还是成员变量,都不能改变
4.final修饰的变量,没有赋值前,是禁止使用的,编译器也会报错
5.final修饰的变量赋值,可以通过初始化赋值、构造函数赋值、构造代码块赋值


super&&this

这里对super和this做统一讲解,都可以用于变量、方法、构造函数,下面通过例子看有什么不一样

this
public class Final {

	String name;
	int age;
	
	public Final(String name, int age) {
		this(age);	
		this.name = name;
	}
	
	public Final(int age) {
		super();
		this.age = age;
	}
	
	public Final() {
		super();
	}
	
}
总结:

1.this可以指代当前对象
2.this可以区分形参和变量名称
3.this可以用于构造函数的引用,切记:只能用于第一行

super
public class Final {

	int age;
	
	public Final(int age) {
		super();
		this.age = age;
	}
	
	public Final() {
		super();
	}
	
	public void name() {
		System.out.println("我是父类");
	}
	
	public static void main(String[] args) {
		Son son=new Son(5);
		System.out.println(son.age);
		son.name();
	}
}

class Son extends Final{
	
	public Son(int age) {
		super(age);
	}
	
	public Son() {
		// TODO 自动生成的构造函数存根
	}
	
	public void name() {
		super.name();
		System.out.println("我是子类");
	}
}

以上输出结果:
5
我是父类
我是子类

总结:

1.super指代父类对象
2.super可以在子类中调用父类被覆盖的方法以及变量
3.super可以用于构造函数的引用,切记:只能用于第一行,同时默认胡调用super()

Super和this的异同

1.super和this都可以代指对象,一个是父类对象一个是当前对象
2.super和this都可以代指方法和变量
3.super和this都可以用于构造函数,但是都只能用于第一行
4.super和this不能同时出现在一个构造函数里面
5.构造函数会默认调用super()
6.super和this都不能在static修饰的地方使用

猜你喜欢

转载自blog.csdn.net/qq_37871033/article/details/86477436