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

相关文章

苹果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 类等待通知方法的区别

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决