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

相关文章

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

模拟实现vector中的常见接口

insert void insert(iterator pos, const T& x){if (_finish == _endofstorage){int n = pos - _start;size_t newcapacity = capacity() == 0 ? 2 : capacity() * 2;reserve(newcapacity);pos = _start + n;//防止迭代

京东物流查询|开发者调用API接口实现

快递聚合查询的优势 1、高效整合多种快递信息。2、实时动态更新。3、自动化管理流程。 聚合国内外1500家快递公司的物流信息查询服务,使用API接口查询京东物流的便捷步骤,首先选择专业的数据平台的快递API接口:物流快递查询API接口-单号查询API - 探数数据 以下示例是参考的示例代码: import requestsurl = "http://api.tanshuapi.com/a

ffmpeg面向对象-待定

1.常用对象 rtsp拉流第一步都是avformat_open_input,其入参可以看下怎么用: AVFormatContext *fmt_ctx = NULL;result = avformat_open_input(&fmt_ctx, input_filename, NULL, NULL); 其中fmt_ctx 如何分配内存的?如下 int avformat_open_input(

股票数据接口-陈科肇

陈科肇 新浪财经 sz-深圳sh-上海历史分价表:http://market.finance.sina.com.cn/pricehis.php?symbol=sz000506&startdate=2016-12-27&enddate=2016-12-27历史成交明细(当日成交明细):http://vip.stock.finance.sina.com.cn/quotes_service/v

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

2021-8-14 react笔记-2 创建组件 基本用法

1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写

2021-08-14 react笔记-1 安装、环境搭建、创建项目

1、环境 1、安装nodejs 2.安装react脚手架工具 //  cnpm install -g create-react-app 全局安装 2、创建项目 create-react-app [项目名称] 3、运行项目 npm strat  //cd到项目文件夹    进入这个页面  代表运行成功  4、打包 npm run build