【Java学习】final关键字、权限修饰符

final

final 关键字代表最终、不可改变的

常见的四种方法:

  1. 可以用来修饰类
  2. 可以用来修饰一个方法
  3. 可以用来修饰一个局部变量
  4. 可以用来修饰一个成员变量

当final关键字修饰类的时候,格式:

public final class 类名称{
    // ...
}

含义:当前这个类不能有任何子类。
注意:一个类如果是final类,那么其中的所有成员方法都无法进行覆盖重写

当final关键字用来修饰一个方法的时候,这个方法就是最终方法,不能被覆盖重写
格式:

修饰符 final 返回值类型 方法名称(参数列表) {
    // 方法体
}

注意事项:
对于类、方法来说,abstract关键字和final关键字不能同时使用。因为矛盾

// 父类
public abstract class Fu {

    public final void method() {
        System.out.println("父类方法执行");
    }
	// abstract和final矛盾
    public abstract /*final */void methodAbs();
}
// 子类
public class Zi extends Fu {
    @Override
    public void methodAbs() {

    }
	// method使用了final,不能被覆盖重写
    /*@Override
    public void method() {
        super.method();
    }*/
}

对于成员变量,如果使用final关键字修饰,那么这个变量也照样是不可变的

1.由于成员变量具有默认值,所以用来final之后必须手动赋值,不会再给默认值了
2.对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值
3.必须保证类当中所有的重载的构造方法,都最终会对final的成员变量进行赋值

public class Person {
    private final String name;

    public Person() {
        name = "张三";
    }

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
	// 因为使用了final关键字,name不可改变
//    public void setName(String name) {
//        this.name = name;
//    }
}

权限修饰符

public protected (default) private
同一个类 yes yes yes yes
同一个包 yes yes yes no
不同包子类 yes yes no no
不同包非子类 yes no no no
发布了19 篇原创文章 · 获赞 20 · 访问量 729

猜你喜欢

转载自blog.csdn.net/sy140823/article/details/104705438