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修饰的地方使用