一、方法、变量的修饰词,private、默认、protected、public的区别。二、抽象类和接口。三、final修饰词的作用。四、static修饰词的作用

2022.8.5

一、方法、变量的修饰词,private、默认、protected、public的区别

private修饰后只能自己的方法访问;

默认无修饰词则还能给同包的子方法访问;

protected修饰的则能被不同包的子类访问;

public修饰的则任何类都可以访问。

在重写方法时,private方法不能重写,因为子类不能访问父类的private方法,所以不能在父类方法的基础上进行拓展

二、抽象类和接口
抽象类可以有普通方法和抽象方法,被继承类只需要重写抽象方法,抽象类可以有静态代码块和静态方法;接口只能有抽象方法,且无构造方法,实现类需要重写所有抽象方法,且接口本身不能实例化所以方法和成员不能被static修饰,不能含有静态代码块以及静态方法。

接口里定义的变量只能是public static final常量,即final必须赋值且为所有实现类通用,可以省略修饰符;抽象类中的变量是普通变量。

接口和接口之间支持多继承,类和类之间只能单继承。一个类可以实现多个接口,但只能继承一个抽象类。

抽象类一般是对“特征”的抽象。接口一般是对“行为”的抽象。

抽象类适合用来定义某个领域的固有属性,也就是本质,接口适合用来定义某个领域的扩展功能。

当需要为一些类提供公共的实现代码时,应优先考虑抽象类。因为抽象类中的非抽象方法可以被子类继承下来,使实现功能的代码更简单。

当注重代码的扩展性跟可维护性时,应当优先采用接口。①接口与实现它的类之间可以不存在任何层次关系,接口可以实现毫不相关类的相同行为,比抽象类的使用更加方便灵活;②接口只关心对象之间的交互的方法,而不关心对象所对应的具体类。接口是程序之间的一个协议,比抽象类的使用更安全、清晰。一般使用接口的情况更多。

JDK8中,Oracle引入默认方法和静态方法,用来减少抽象类和接口的差异,接口中提供default的带方法体的方法,因为不是abstract的,实现该接口的类不用强制去实现这个方法,也不用重写。JDK8中接口的static方法只能通过接口名直接去调用,接口中的默认方法所以可重写,也可以不重写。

default方法可以继承,可以重写,二选一,但是只能通过实现类的对象来调用,接口中,有多个默认方法时,实现类都可继承使用,如果继承方法有重名的,必须重写一次。

三、final修饰词的作用

final修饰方法时,方法是最终方法不能被子类重写,但子类仍旧能调用父类的final方法。

final修饰成员变量和局部变量时,只能赋值一次,能直接在成员变量、通过构造方法赋值,但不能重新赋值,如果修饰的是引用类型,则是对象记录的地址值不能变,但是对象在不改变地址值的情况下,对象的成员可以变。

四、static修饰词的作用

static修饰变量时,变量被所有对象共享,一个对象对变量的重新赋值都会影响到所有的其他对象。


当static修饰方法时,static方法只能访问static变量和static方法,但无论是否static方法都能访问static变量和static方法。方法在没用到普通成员和方法时就可以做成static方法。

当static修饰static代码块时,在初始化类加载时只执行一次,子类入栈时父类的static代码块先执行再执行子类静态代码块。(另外创建子类对象时,代码块会在执行构造方法一开始执行,且先执行父类代码块再执行子类代码块)

由于static修饰的任何变量或者代码都是在编译时由系统自动分配内存来存储的,编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,所以static用来区分成员变量、方法是属于类本身还是属于类实例化后的对象,使得static修饰的变量和方法都能在不实例化的情况下,通过类名调用,这也符合所有工具类的设定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值