文章目录

  • Java修饰符权限
  • final的关键字
  • 常量
  • 枚举
  • 抽象类
  • 接口

Java修饰符权限

什么是权限修饰符?

权限修饰符:是用来控制一个成员能够被访问的范围的。
可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能够被访问的范围将受到限制。

权限修饰符的分类和具体作用范围:

权限修饰符:有四种作用范围由小到大(private -> 缺省 -> protected - > public )

final的关键字

final的作用

final 关键字是最终的意思,可以修饰(方法,变量,类)
1、修饰类:表明该类是最终类,不能被继承。
2、修饰方法:表明该方法是最终方法,不能被重写。
3、修饰变量:表示该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次)。

final修饰变量的注意

final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的。

常量

常量概述和基本作用

 常量是使用了--public static final--修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变。常量的作用和好处:可以用于做系统的配置信息,方便程序的维护,同时也能提高可读性。

常量命名规范:英文单词全部大写,多个单词下划线连接起来。

常量的执行原理

在编译阶段会进行“宏替换”,把使用常量的地方全部替换成真实的字面量。
这样做的好处是让使用常量的程序的执行性能与直接使用字面量是一样的。

枚举

枚举的概述

枚举是Java中的一种特殊类型
枚举的作用:"是为了做信息的标志和信息的分类

定义枚举类的格式:


枚举的特征:

1、枚举类都是继承了枚举类型:java.lang.Enum
2、枚举都是最终类,不可以被继承。
3、构造器都是私有的,枚举对外不能创建对象。
4、枚举类的第一行默认都是罗列枚举对象的名称的。
5、枚举类相当于是多例模式。

抽象类

抽象类概述

在Java中abstract是抽象的意思,如果一个类中的某个方法的具体实现不能确定,就可以申明成abstract修饰的抽象方法(不能写方法体了),
这个类必须用abstract修饰,被称为抽象类。格式如下:
修饰符 abstrace class 类{修饰符 abstract 返回值类型 方法名称(参数列表);
}

抽象的使用总结与注意事项

抽象类可以理解成类的不完整设计图,是用来被子类继承的。
一个类如果继承了抽象类,那么这个类必须重写完抽象类的-- 全部---抽象方法,否则这个类也必须定义成抽象类。

问题1:抽象类的作用是什么样的?

可以被子类继承、充当模板的、同时也可以提高代码复用。

问题2:抽象方法是什么样的?

只有方法签名,没有方法体,使用了abstract修饰。

问题3:继承抽象类有哪些要注意?

一个类如果继承了抽象类,那么这个类必须重写完抽象类的全部抽象方法。
否则这个类也必须定义成抽象类。

抽象类的案例

系统需求
某加油站推出了2种支付卡,一种是预存10000的金卡,后续加油享受8折优惠,另一种是预存5000的银卡 ,后续加油享受8.5折优惠。
请分别实现2种卡片进入收银系统后的逻辑,卡片需要包含主人名称,余额,支付功能。分析实现
创建一张卡片父类:定义属性包括主人名称、余额、支付功能(具体实现交给子类)
创建一张白金卡类:重写支付功能,按照原价的8折计算输出。
创建一张银卡类:重写支付功能,按照原价的8.5折计算输出。

FuCard卡片父类

BaiJin_Card白金卡类

YIn_Card银卡类

Test测试类

抽象类的特征、注意事项

1、有得有失: 得到了抽象方法,失去了创建对象的能力。
2、类有的成员(成员变量、方法、构造器)抽象类都具备
3、抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
4、一个类继承了抽象类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。
5、不能用abstract修饰变量、代码块、构造器。

final和abstract是什么关系?

1、互斥关系
2、abstract定义的抽象类作为模板让子类继承,final定义的类不能被继承。
3、抽象方法定义通用功能让子类重写,final定义的方法子类不能重写。

抽象类的应用知识:模板方法模式
什么时候使用模板方法模式

使用场景说明:当系统中出现同一个功能多处在开发,而该功能中大部分代码是一样的,只有其中部分可能不同的时候。

模板方法模式实现步骤

把功能定义成一个所谓的模板方法,放在抽象类中,模板方法中只定义通用且能确定的代码。
模板方法中不能决定的功能定义成抽象方法让具体子类去实现。

模板方法模式案例:

某软件公司要为某银行的业务支撑系统开发一个利息结算系统,账户有活期和定期账户两种,
活期是0.35%,定期是 1.75%,定期如果满10万额外给予3%的收益。
结算利息要先进行用户名、密码验证,验证失败直接提示,登录成功进行结算

Account账户抽象类

public abstract class Account {public static final String LOGIN_NAME = "itheima"; // 常量public static final String PASS_WORD = "123456";  // 常量private String cardId;private double money;public Account(){}public Account(String cardId, double money){this.cardId = cardId;this.money = money;}/*** 登录结算利息*/public void handle(String loginName, String passWord){// 1. 判断是否登录成功if(LOGIN_NAME.equals(loginName) && PASS_WORD.equals(passWord)){System.out.println("登录成功~~~");// 2. 结算利息double result = calc();  // 活期与死期唯一不同的部分在于利息的计算方式不同,定义一个抽象方法,在子类中进行计算System.out.println("本账户利息是:" + result);}else {// 3. 登录失败System.out.println("登录失败~~~");}}public abstract double calc();public String getCardId() {return cardId;}public void setCardId(String cardId) {this.cardId = cardId;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}
}

CurrentAccount活期账户类:
FixedAccount死期账户类:
Test测试类:

接口

接口概述、特点

接口用关键字interface来定义
public interface 接口名 {  // JDK8之前接口中只能有常量和抽象方法// 常量// 抽象方法
} 1、JDK8之前接口中只能是--抽象方法--和--常量--,没有其他成分了。
2、接口不能实例化。
3、接口中的成员都是public修饰的,写不写都是,因为规范的目的是为了公开化。


接口的基本使用:被实现

接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类。
修饰符  class  实现类 implements 接口1,接口2, 接口3.....{}
从上面可以看出,接口可以被类单实现,也可以被类多实现。

接口实现的注意事项:

一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类。


接口与接口的关系:多继承

1、类和类的关系:单继承(extends)。
2、类和接口的关系:多实现(implements)。
3、接口和接口的关系:多继承,一个接口可以同时继承多个接口。接口多继承的作用: 规范合并,整合多个接口为同一个接口,便于子类实现。


JDK8开始接口新增方法

1、默认方法:default修饰,实现类对象调用。类似之前写的普通实例方法:必须用default修饰默认会public修饰。需要用接口的实现类的对象来调用2、静态方法:static修饰,必须用当前接口名调用默认会public修饰,必须static修饰。注意:接口的静态方法必须用本身的接口名来调用。3、私有方法:private修饰,jdk9开始才有的,只能在接口内部被调用。他们都会默认被public修饰。就是私有的实例方法:,必须使用private修饰,从JDK 1.9才开始有的。只能在本类中被其他的默认方法或者私有方法访问。注意:JDK8新增的3种方法我们自己在开发中很少使用,通常是Java源码涉及到的,我们需要理解、识别语法、明白调用关系即可。
public interface SportManInter {/*** 1、JDK 8开始:默认方法(实例方法)* -- 必须default,默认用public修饰* -- 默认方法,接口不能创建对象,这个方法智能过继给实现类,由实现类的对象调用。*/default void run(){go();System.out.println("跑的非常快~~~");}/**csharp* 2、静态方法* 必须使用static修饰,默认用public修饰* -- 接口静态方法,必须接口名自己调用*/static void inAddress(){System.out.println("University");}/*** 3、私用方法* -- JDK 1.9开始支持的* -- 必须在接口内部才能被访问*/private void go(){System.out.println("跑的快~~~");}
}class PingPongMan implements SportManInter{}class Test{public static void main(String[] args) {PingPongMan p = new PingPongMan();p.run();// PingPongMan.inAddress();  // 接口名称不可调用接口的静态方法// p.inAddress();           // 接口实现类不可调用接口的静态方法错误SportManInter.inAddress();  // 接口中的静态方法只能用接口名称.静态方法的调用方式}
}

使用接口的注意事项

1、接口不能创建对象
2、一个类实现多个接口,多个接口中有同样的静态方法不冲突。
3、一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法,默认用父类的。
4、一个类实现了多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可。
5、一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承。

Java权限修饰符、final、常量、枚举、抽象类、接口相关推荐

  1. 包 权限修饰符 final 常量 枚举 抽象类 接口 多态 内部类 常用API 正则表达式 Lambda

    包 什么是包? 包是用来分门别类的管理各种不同类的,类似于文件夹.建包利于程序的管理和维护. 建包的语法格式:package 公司域名倒写.技术名称.报名建议全部英文小写,且具备意义. package ...

  2. 10 - java 权限修饰符

    java权限修饰符 作用域 当前类 同package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly(defult) √ √ × × p ...

  3. java基础2:this、static、final、abstract关键字、代码块、生成API工具包、继承、多态、方法重载和重写,抽象类、接口、常见异常、java权限修饰符、选择排序思想和程序和内部类

    1.this关键字 this表示当前类对象的地址空间值的引用.就是说,this代表了new出来的对象 其最大作用就是解决了构造器中局部变量隐藏成员变量.即用this.变量名 = 变量名 区分. 2.s ...

  4. Java-包、权限修饰符final、static

    包 关于记事本创建包 1.手动创建包 举例: 在E盘创建一个文件夹com,在com下再创建一个smile,将java编译生成的class文件放于其中 若要执行则需命令带包执行 javac HelloW ...

  5. Java权限修饰符解析

    前言:在面向对象编程语言中,我们常用的权限修饰符有四种,分别是:private.public.protected和默认修饰符,那么被这四种权限修饰符修饰的方法在不同的类中调用都有什么特点呢?除了修饰方 ...

  6. java 权限修饰符大小_Java中访问权限修饰符public protected private, 缺省默认权限的用法总结...

    1.访问权限符: (1)public: 对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中. 对于类来说: 也是一样. (2)friendly: 对于成员老说:如果一个类的成员没 ...

  7. java权限修饰符default和protected区别

    java一共有4中权限修饰符,分别是private.default.protected和public private和public很好理解,default和protected不太好分清. protec ...

  8. Java权限修饰符的作用范围

    访问权限修饰符的访问权限从高到低为:public > protected > (默认的) > private (其中默认的就是什么都没有) 访问权限修饰符使其对应的方法和属性的访问范 ...

  9. java 权限修饰符_java中4种访问权限修饰符

    在Java编程语言中有四种权限访问控制符,这四种访问权限的控制符能够控制类中成员的可见性. 一.public (1) 定义:public是公共的,被public所修饰的成员可以在任何类中都能被访问到. ...

  10. day12、面向对象进阶(包、权限修饰符、final、常量、枚举、抽象类、接口)

    面向对象进阶(包.权限修饰符.final.常量.枚举.抽象类.接口) 包 权限修饰符 final 常量 常量概述和基本作用 常量做信息标志和分类 枚举 枚举的概述 枚举的使用场景演示 抽象类 抽象类概 ...

最新文章

  1. RStudio v1.2.1335 发布,R 语言的集成开发环境
  2. 17 博客后台富文本编辑
  3. 开放平台战略下的趣店用户“跨界”
  4. html图片标签和语义化标签和音频
  5. jQuery 一些操作
  6. 合成资产平台Public Mint与跨链资产协议Knit Finance达成合作
  7. Memcached安装及配置
  8. Mellanox刘通:开放的理念让Mellanox的优势愈加凸显
  9. eclipse集成weblogic开发环境的搭建
  10. Linux之判断socket是否断开
  11. java笔记之过滤器
  12. Spring 4.xx开发环境搭建
  13. Software Testing - UI自动化测试常用设计模式之原型(Java)
  14. 一到十二月英文 音标 简写
  15. java heap space 什么意思_java heap space是什么意思?
  16. C++ 中 _T 含义及用途
  17. android获取手机资源文件,android MediaStore 读取手机文件
  18. 时代“前浪”迅雷拍被打暗礁,Q2财报或道出缘由
  19. APP (UniAPP) 微信支付回调的 HTTP_RAW_POST_DATA 报错情况 (wxpayv3)
  20. IP地址更改小工具(bat命令)

热门文章

  1. ESP8266-01 + stm32单片机 + app开发实现无限距离控制
  2. DCU服务器基于Docker开发
  3. taoism版辅助计算工具加入了滑动窗口功能
  4. SWT 手机重启问题分析
  5. qt_admin web开发框架
  6. 微信公众平台如何设置欢迎信息
  7. Alkaitu:STM32的IO模拟I2C
  8. 2021年焊工(初级)考试内容及焊工(初级)考试试卷
  9. 微信小程序打开pdf、docx等文件
  10. 【校内测 11.1】 【数学题】 [LnOI2019SP]快速多项式变换(FPT)