面向对象(static、final、接口)-第一阶段-第十天-2021-7-26

2024-02-25 18:08

本文主要是介绍面向对象(static、final、接口)-第一阶段-第十天-2021-7-26,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

static关键字(静态的)

static关键字能够修饰类中的属性、方法、代码块

static关键字用来修饰属性(成员变量)

  1. 被修饰后的成员变量是根据类的加载在而加载,被修饰的成员变量一般用
    类名.属性名的方式来调用,虽说能够用对象.属性的形式调用但是不规范,因为静态成员变量可以解释为所有对象公共拥有的一个属性,用来表示某一个对象是不规范的。
  2. 被static修饰的属性在内存中只有一份,其他的对象来调用此属性的时候又是引用其地址值,而不是再创建一份。
  3. 静态的属性的应用比如:想要知道一个类创建了多少个对象就可以使用静态的属性来记录,写在静态方法中,没构造一次对象就对其值加一即可。

static关键字用来修饰方法

  1. 方法在类调用之前在内存中是有一块方法区的,要调用方法里面的指令就需要引用该方法区,当用静态方法之后内存的储存没有多大的改变,还是只有一份,但是调用的方式发生了改变,如以前只能通过对象名.方法名的方式调用,但是通过static关键字就可以通过类名.方法名的方式调用。
  2. 在静态方法中只能调用静态的方法和静态的属性,不能够调用非静态的属性和方法。
  3. 静态方法一般用于工具类(可以认为无属性的类)之中,通过类名就可直接调用,比较方便。

static关键字用来修饰代码块

  1. 静态代码块中的代码会在类加载的时候就执行其中的代码,能够完成一些类的准备工作,也就是加载好类。
  2. 同样的静态代码块中只能有静态的方法和属性。
  3. 普通的代码块一般完成对象的初始化工作,跟构造器的初始化功能重复,所以普通代码块一般用的很少。

final关键字(最终的)

可以用来修饰类、属性,方法,局部变量

final用来修饰类

用来修饰类的时候表示这个类是最终的,意思是这个类就不能被继承

final用来修饰属性

用来修饰属性的时候表示常量,且常量必须得有一个初始值(在构造器中初始化、代码块中初始化、赋值时初始化),表示值不能被修改

final用来修饰方法

用来修饰方法的时候表示不能被重写

final用来修饰局部方法

用来修饰局部方法的时候一旦修饰之后值就不能被修改

接口(interface)

接口的定义:一种能力和行为的规范或者标准(不能有具体的实现)

1.因为接口中只能做方法的规范,因此方法定义时前面的public abstract可以省略

2.作为该接口的实现类(可以认为就是这个接口的子类)定义时通过implements 接口名称来实现这个接口中定义的方法

3.接口的实现一定要写在extends继承的后面

4.和继承类似,接口也是实现多态的一种方式 多态分为两种:继承多态 接口多态

5.和父类不同,一个类只能继承一个父类,但是可以实现多个接口 implements a接口,b接口,这是对JAVA中单继承的一种弥补

6.接口和抽象类的区别:
接口比抽象类还要抽象,开发中如果我们无法找到某些类之间的共同的父类,此时可以单纯从行为进行抽象,做成一个接口,因此接口的抽象能力比抽象类更加的强大

类是从属性和行为两个角度找共性,接口只是从行为这个角度寻找共同点

7.和类不同,接口中是不能定义常规属性,只能定义public static final 类型的常量

8.一个接口中可以同时定义多个不同的抽象方法

9.接口中不能定义构造方法,当然也无法直接创建接口对象

10.接口之间可以相互继承

11.作为一个子类只要实现的某个接口必须强制实现接口中定义的所有抽象方法

12.在接口可以使用默认方法定义,使用default关键字声明即可 ,在jdk高版本中提供的一个新特性

接口的应用

实现对学生属性中名字,年龄,分数的查询

package com.qianfeng.day11;//学生类
public class Student {private String name;private String gender;private int age;private double score;private static int studentNumber = 0;private static int maleNumber = 0;private static int femaleNumber = 0;private static int passNumber = 0;private static int noPassNumber = 0;public Student() {super();}public Student(String name, String gender, int age, double score) {super();this.name = name;this.gender = gender;this.age = age;this.score = score;studentNumber++;if (this.gender.equals("male")) {maleNumber++;}femaleNumber = studentNumber-maleNumber;if (this.score >= 60) {passNumber++;}noPassNumber = studentNumber-passNumber;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}public static int getStudentNumber() {return studentNumber;}public static void setStudentNumber(int studentNumber) {Student.studentNumber = studentNumber;}public static int getMaleNumber() {return maleNumber;}public static void setMaleNumber(int maleNumber) {Student.maleNumber = maleNumber;}public static int getFemaleNumber() {return femaleNumber;}public static void setFemaleNumber(int femaleNumber) {Student.femaleNumber = femaleNumber;}public static int getPassNumber() {return passNumber;}public static void setPassNumber(int passNumber) {Student.passNumber = passNumber;}public static int getNoPassNumber() {return noPassNumber;}public static void setNoPassNumber(int noPassNumber) {Student.noPassNumber = noPassNumber;}@Overridepublic String toString() {return "Student [name=" + name + ", gender=" + gender + ", age=" + age + ", score=" + score + "]";}}
package com.qianfeng.day11;//学生管理类
public class StudentManager {private Student[] students = new Student[] {new Student("zs", "male", 30, 98.5)	,new Student("ls", "female", 23, 48.5),new Student("ww", "male", 19, 78.5),new Student("zl", "male", 22, 58.5),new Student("tq", "female", 21, 70.5),};public void showStudentInfoByGender(Inquire inquire) {for (int i = 0; i < students.length; i++) {if (inquire.searching(students[i])) {System.out.println(students[i].toString());}}System.out.println("总人数有:" + Student.getStudentNumber());System.out.println("男性有:" + Student.getMaleNumber());System.out.println("女性有:" + Student.getFemaleNumber());System.out.println("及格人数有:" + Student.getPassNumber());System.out.println("及格人数有:" + Student.getNoPassNumber());}}
package com.qianfeng.day11;//查询接口
public interface Inquire {public abstract boolean searching(Student student);}
package com.qianfeng.day11;public class Test{public static void main(String[] args) {StudentManager studentManager = new StudentManager();studentManager.showStudentInfoByGender(new Inquire() {@Overridepublic boolean searching(Student student) {return student.getAge() > 20;}});studentManager.showStudentInfoByGender(s->s.getName().equals("ls"));}}

这篇关于面向对象(static、final、接口)-第一阶段-第十天-2021-7-26的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/746274

相关文章

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学