Java中的一些关键字:static,final,和abstract,interface,以及访问修饰符说明

1、关键字可以修饰的说明:

关键字属性(是否可修饰)方法(是否可修饰)类(是否可修饰)
static
final
abstract

2、关键字的意义:

关键字意义具体特性说明被继承的话,会有什么后果?
static表示属于该类。1. 修饰变量:属于该类
2. 修饰方法:子类可覆盖为static,但不可覆盖为非static。
3. 修饰类:属于该类
见下面详细的补充说明
final表示一旦赋值不能改变。1. 修饰变量:一旦赋值不能改变;
2. 修饰方法:不能被其子类覆盖;
3. 修饰类:不能被继承;
不会有继承的问题,因为其代表不可变。
abstract抽象,表示只是定义。1. 修饰变量:不可以
2. 修饰方法:抽象方法没有实现,只能被子类继承并实现
3. 修饰类:抽象类不能生成对象实例,只能被子类继承并实例化子类。。
完全为了继承而生。
interfaceabstract 的特例1.8之前:
- 变量默认是 public static final 类型;
- 方法默认是 public abstract 类型;
1.8 之后:
- 方法:可定义一个或多个静态(static)方法(就是一static方法而已,只是定义改变了)
- 方法:可用 default 修饰符定义(就是一普通方法而已,只是定义改变了)
?后续补充

注意:

注:不能放在一起的修饰符:final,private,static,因为 abstract 修饰的方法必须在子类中实现(覆盖),才能以多态方式调用,而以上修饰符在修饰方法时期子类都覆盖不了这个方法。
final 是不可以覆盖,private 不能够继承到子类也就不能覆盖,static 虽然可以被覆盖,但调用时会调用编译时类型的方法,因为调用的是父类的方法,而父类的方法又是抽象的方法,又不能够调用,所以上的修饰符不能放在一起。

3、static的继承和覆盖说明:

注:下面只是测试,实际不建议通过实例对象访问静态变量。编译期会提示不建议,但实际可执行。

被继承后:父为类A,子为类B父(类A)属性(na)(static)父(类A)方法(static)
子(类B)覆盖(static)A.na / a.na表示:父类中的变量;
B.na / b.na表示:子类中的变量;
如下图
子(类B)覆盖(非static)A.na / a.na表示:父类中的变量;
B.na:编译错误;
b.na:B 中的普通成员变量
如下图
子(类B)不覆盖A.na / a.na / B.na / b.na 代表的是同一个变量

上面没有考虑另一种情况:子类对象赋值给父类对象的情况。此时:输出的还是父类中的内容(方法和变量都是如此)。

方法覆盖的测试如下图:

5d3055e1ae77319934.png

4、4 种访问修饰符:public、protected、default、private

20190718174708.png

5、参考:

  1. Java 中继承之后同名静态变量的问题分析 - 做一个快乐的人 - CSDN 博客
  2. Java 中 4 种访问修饰符 public/protected/default (friendly)/private - mingjie1212 的博客 - CSDN 博客
  3. Java 基础- final、static 和 abstract 区别和使用 - 余额不足 - CSDN 博客
  4. Java 8 特性 ——interface 中的 static 方法和 default 方法 - 钝悟需要时间的打磨,顿悟需要时间的积累 - CSDN 博客
  5. Java 8 新特性:接口的静态方法和默认方法 - Promise Sun special column - CSDN 博客
    注:说的最好的。

转载于:https://www.cnblogs.com/buwuliao/p/11209567.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值