一、接口和抽象类
1、抽象类相关:
抽象类本质上是一个类,类可以拥有的成员,包括成员变量,方法和构造方法在抽象类中都可以有(抽象类有构造方法但是不能实例化)。
抽象类用abstract关键字实现并被子类继承,抽象类中不一定必须有抽象方法,但是有抽象方法的类必须是抽象类。
抽象方法不包含方法体,需要子类继承并重写。
抽象类存在的意义:1.是为了被子类继承并重写必要的方法。2.是为了向上转型。
2、接口(比抽象类更严格,全部为抽象成员方法)相关:
接口中的方法默认为public abstract类型(可以不是抽象类型,但是这样做失去接口意义),接口中的成员变量类型不写默认为public static final。
接口没有构造方法。
接口可以实现“多继承”,一个类可以实现多个接口,实现写法格式为直接用逗号隔开即可。
3、关于抽象类不能被private,final等修饰词修饰的思考:
抽象类可以作为一个类应用,也可以作为父类要求被继承 ,如果用private(不能被其他类应用)和final(类不能被继承)等修饰词修饰就失去其存在的意义。
4、关于接口不能被private,default,protect等权限关系词修饰的思考:
接口存在的意义就是为了开放公共接口并实现并重写其抽象方法,如果用private,protect,final等修饰词修饰就失去其存在的意义。
5、关于接口内的成员变量只能用final static修饰(即常量)的思考:
1??. 接口是一种高度抽象的"模版",,而接口中的属性也就是’模版’的成员,就应当是所有实现"模版"的实现类的共有特性,所以它是public static的 ,是所有实现类共有的.
假如可以是非static的话,因一个类可以继承多个接口,出现重名的变量,如何区分呢?
2?? 接口中如果可能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了,有可变成员变量,但对应的方法却无法操作这些变量,虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了,这跟抽象类有何区别?
接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的。
3??. 接口只是对事物的属性和行为更高层次的抽象 。对修改关闭,对扩展(不同的实现implements)开放。
二、四大权限修饰符:
三、final关键字
final在Java中可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了(即你的指针指向不会改变了,而不是既定的值不会变),如果你试图将变量再次初始化的话,编译器会报编译错误。
final关键字修饰的类是最终类,不能被继承。
final关键字修饰的方法是最终方法,不能被重写。
final关键字修饰的成员变量只能被赋值一次,被赋值后不能再次进行赋值(即改变变量的指向)。
原文:https://www.cnblogs.com/NiYv/p/12369697.html