面向对象(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

相关文章

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别