十三、面向对象(四)(final,抽象类和接口,package和import,访问控制权限)

一、final

1.final的含义

(1)final是java中的一个关键字。
(2)final表示最终的,不可变的。
(3)final可以修饰变量以及方法和类等。
(4)final修饰的类无法继承;
修饰的方法无法被覆盖,被重写;
修饰的局部变量,只能赋一次值,
修饰的引用只能指向1个对象,并且只能永远指向该对象,直到该方法结束前该对象不会被垃圾回收器回收;
修饰的实例变量,系统不默认赋值,需要程序员手动赋值,这个手动赋值,在变量后面赋值可以,在构造方法中赋值也是可以的。
static final联合修饰的变量被称为“常量”,常量名建议全部大写,每个单词之间采用下划线衔接

二、抽象类和接口以及它们的区别

1.抽象类

(1)什么是抽象类
类和类之间有共同特征,将这些共同特征提取出来,形成的就是抽象类;类到对象是实例化,对象到类是抽象;类本身是不存在的,所以抽象类无法创建对象(无法实例化)。

(2)抽象类属于什么类型
抽象类也属于引用数据类型

(3)抽象类怎么定义
语法:
[修饰符列表] abstract class 类名{
      类体;
}

(4)抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的。

(5)final和abstract无法同时出现,这两个关键字是对立的。

(6)抽象类的子类可以是抽象类,也可以是非抽象类。

(7)抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的

(8)抽象类关联到一个概念,抽象方法,什么是抽象方法?
抽象方法表示没有实现的方法,没有方法体的方法
public abstract void doSome( );

(9)抽象方法的特点
没有方法体,以分号结尾;
前面修饰符列表中有abstract关键字。

(10)抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中。

(11)(重要)一个非抽象的类继承抽象类,必须将抽象类中的抽象方法实现/覆盖/重写

2.接口

(1)接口基础语法
<1> 接口也是一种引用数据类型
<2> 接口是完全抽象的(抽象类是半抽象的)或者说接口是特殊的抽象类
<3> 接口的定义:
[修饰符列表] interface 接口名{
}
<4> 接口支持多继承,一个接口可以继承多个接口
<5> 接口只包含常量和抽象方法
<6> 接口中所有的元素都是public
<7> 接口中的抽象方法定义时,public abstract可以省略
<8> 接口中的方法都是抽象方法,所以接口中的方法不能有方法体
<9> 接口中的常量,public static final可以省略
<10> 类和类之间叫继承,类和接口之间叫实现(实现也可以看做“继承” 继承使用extends关键字,实现使用implements关键字)
<11> (重要)当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现(覆盖/重写)
<12> (重点)一个类可以实现多个接口。弥补了类与类直接的单继承
<13> 接口和接口之间在进行强制类型转换的时候,没有继承关系也能强转,但是运行时有可能出现ClassCastException异常
<14> extends(继承)和implements(实现接口)同时出现是继承在前,实现在后
<15> 使用接口,写代码的时候,可以使用多态(父类型引用指向子类型对象)

(2)接口在开发中的作用
接口在开发中的作用类似多态在开发中的作用;
满足has a的表示都以属性的形式存在;
面向抽象编程,不要面向具体编程;降低程序的耦合度,提高程序的扩展力,符合OCP原则,接口的使用离不开多态机制;
接口可以解耦合,解的是调用者和实现者的解耦合;

3.抽象类和接口的区别

抽象类是半抽象的,接口是完全抽象的;
抽象类中有构造方法,接口中没有构造方法;
接口和接口之间支持多继承,类和类之间只能单继承;
一个类可以同时实现多个接口,一个抽象类只能继承一个类(单继承)。
接口中只允许出现常量和抽象方法。

扩展

类和类之间的关系

is a:表示“继承关系”
has a:表示“关联关系”,通常以“属性的形式存在”
like a:表示“实现关系”,通常是类实现接口

三、package和import

1.package

(1)为什么要使用package?
package是java中的包机制,包机制是为了方便程序的管理,不同功能的类分别存放在不同的包下。
(2)package怎么用?
package是一个关键字,后面加包名;
package语句只允许出现在java源代码的第一行。
(3)包名的命名规范
一般都采用公司域名倒序的方式(公司域名具有全球唯一性)
包名命名规范:公司域名倒序+项目名+模块名+功能名

(4)对于带有package的java程序怎么编译?怎么运行?

(指用文本编译器编译)

编译:javac -d . 类名.java
运行:包名.类名

2.import

(1)import什么时候使用?
一个类要使用另一个类,并且两个类不在同一个类中的时候,需要使用import
(2)import怎么使用?
import语句只能出现在package下面和class的声明语句之上
(3)String是java.lang下的,为什么不需要导入
因为java.lang.*下的很特殊,可以直接用,不需要import导入(System也是lang下的)

四、访问控制权限

1.有哪些访问控制权限?

(1)private 私有
(2)protected 受保护
(3)public(公开)
(4)默认

2.访问控制权限控制的范围有哪些?

(1)private 表示私有的,只能在本类中访问
(2)public 表示公开的,在任何地方都能访问
(3)protected 表示只能在本类、同包、子类中访问
(4)默认 表示只能在本类,以及同包下访问

3.访问控制权限修饰符可以修饰什么/

属性(4个都能用)
方法(4个都能用)
类(只能用public和默认)
接口(只能用public和默认)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值