Java自学(三)面向对象编程

news/2024/12/28 15:18:42/

目录

什么是面向对象

举例

this关键字和构造器

实体类

电影小案例


什么是面向对象

我们日常生活中谈到一个事物,总会描述它的性质与行为,这个事物也就是 ”对象”。比如一个学生对象,他的属性有姓名、学号、成绩......他的行为有上课、吃饭、睡觉.......将一个对象及其行为封装起来便于描述表达,这就是面向对象的思想。

举例

先在右边创建一个学生类,其成员变量有name, ID, grade,成员方法有分别获取3个属性的3种方法。

再在左边将对象模板实例化,也就是将抽象的学生类型抽象成具体的一名学生。针对实例化出的每一名学生可以设置不同的属性参数,并调用其成员方法。

在成员变量初始化时可以赋初始值,当然这么做没有意义,默认一开始成员变量是有初值的。

我们来看一下具体的实现过程:

 

this关键字和构造器

 这一块学了C++后再看感觉太亲切了,this 是为了避免变量重名而产生的。

这不能这么写吧?因此就有了this关键字。

构造器就类似于C++的构造函数,你不显示的写的话编译器会自动生成一个默认的无参构造器,要是你显示写了一个带参构造器,就不会自动生成,这时最好再自己加一个无参构造器。

构造器方便我们给成员变量赋初始值,这样可以不用在方法内部或者外部创建对象的时候赋值,而是直接调用构造器进行赋值。

 

实体类

什么是实体类?————它仅仅是用来保存数据的Java类,可以用它来创建对象。

它的成员变量必须私有,并且必须为其提供get , set方法以及无参构造器。

应用场景是针对数据和数据的处理分离,是目前主流的处理方式。

具体案例:

public class Student {private String name;private int ID;private double grade;public Student(String name, int ID, double grade) {this.name = name;this.ID = ID;this.grade = grade;}public Student() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getID() {return ID;}public void setID(int ID) {this.ID = ID;}public double getGrade() {return grade;}public void setGrade(double grade) {this.grade = grade;}
}

 这就是实体类,用来保存数据。

之前我们想打印成绩,或者判断成绩是否合格,是在Student类中定义方法,现在可以在创建一个StudentOperator类来描述该动作。

//StudentOperator类public class StudentOperator {private Student s;public StudentOperator(Student s){this.s = s;}public void passGrade(){if(s.getGrade() >= 3.0){System.out.println(s.getName()+s.getID()+"成绩合格");}else{System.out.println(s.getName()+s.getID()+"成绩不合格");}}
}
//Test类public class Test {public static void main(String[] args) {Student s1 = new Student("张三",2021,3.0);StudentOperator operator = new StudentOperator(s1);operator.passGrade();}
}

结果: 

电影小案例

//Movie classpackage demo;public class Movie {private int ID;private String name;private double price;private double score;public Movie() {}public Movie(int ID, String name, double price, double score) {this.ID = ID;this.name = name;this.price = price;this.score = score;}public int getID() {return ID;}public void setID(int ID) {this.ID = ID;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}
}
//MovieOperator classpublic class MovieOperator {private Movie[] movies;public MovieOperator(Movie[] movies){this.movies = movies;}public void Print(){System.out.println("打印全部电影信息");System.out.println("--------------------");for (int i = 0; i < movies.length; i++) {Movie m = movies[i];System.out.println(m.getName()+" "+m.getID()+" "+m.getScore()+" "+m.getPrice());System.out.println("--------------------");}}public boolean searchMovie(int ID){for (int i = 0; i < movies.length; i++) {Movie m = movies[i];if(ID == m.getID()){System.out.println(m.getName()+" "+m.getID()+" "+m.getScore()+" "+m.getPrice());return true;}}System.out.println("查找失败,电影不存在");return false;}
}
//Test classpublic class Test {public static void main(String[] args){Movie[] movies = new Movie[3];movies[0] = new Movie(001,"你的名字",39.9,8.9);movies[1] = new Movie(002,"天气之子",29.9,8.0);movies[2] = new Movie(003,"铃芽之旅",25.8,8.7);MovieOperator m = new MovieOperator(movies);Scanner sc = new Scanner(System.in);while (true){System.out.println("请输入数字 0, 1,2以选择相应的小程序");int r = sc.nextInt();switch(r){case 0:System.out.println("退出程序");return;case 1:m.Print();break;case 2:System.out.println("请输入你要查找的电影编号");int id = sc.nextInt();boolean flag = m.searchMovie(id);break;default:System.out.println("输入不合法的数字,请重新输入");break;}}}
}


http://www.ppmy.cn/news/1130643.html

相关文章

【中秋国庆不断更】OpenHarmony定义可动画属性:@AnimatableExtend装饰器

AnimatableExtend装饰器用于自定义可动画的属性方法&#xff0c;在这个属性方法中修改组件不可动画的属性。在动画执行过程时&#xff0c;通过逐帧回调函数修改不可动画属性值&#xff0c;让不可动画属性也能实现动画效果。 可动画属性&#xff1a;如果一个属性方法在animation…

信息学奥赛一本通 2075:【21CSPJ普及组】插入排序(sort) | 洛谷 P7910 [CSP-J 2021] 插入排序

【题目链接】 ybt 2075&#xff1a;【21CSPJ普及组】插入排序&#xff08;sort&#xff09; 洛谷 P7910 [CSP-J 2021] 插入排序 【题目考点】 1. 排序&#xff1a; 插入排序 插入排序示例&#xff1a; #include <bits/stdc.h> using namespace std; int main() {int…

Android Studio 的android.jar文件在哪儿

一般在&#xff1a;C:\Users\admin\AppData\Local\Android\Sdk\platforms\android-33下&#xff08;不一定是33&#xff0c;这个得看你Android Studio->app->builde.gradle的targetSdk是多少&#xff09; 怎么找&#xff1a; 1.打开Android Studio 粘贴地址后&#xff0…

ConcurrentHashMap 并发

1 ConcurrentHashMap 并发 1.1 减小锁粒度 减小锁粒度是指缩小锁定对象的范围&#xff0c;从而减小锁冲突的可能性&#xff0c;从而提高系统的并发能力。减小锁粒度是一种削弱多线程锁竞争的有效手段&#xff0c;这种技术典型的应用是 ConcurrentHashMap(高性能的 HashMap)类的…

Miniconda创建paddlepaddle环境

1、conda env list 2、conda create --name paddle_env python3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 3、activate paddle_env 4、python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple 5、pip install "p…

【超详细】Wireshark教程----Wireshark 分析ICMP报文数据试验

一&#xff0c;试验环境搭建 1-1 试验环境示例图 1-2 环境准备 两台kali主机&#xff08;虚拟机&#xff09; kali2022 192.168.220.129/24 kali2022 192.168.220.3/27 1-2-1 网关配置&#xff1a; 编辑-------- 虚拟网路编辑器 更改设置进来以后 &#xff0c;先选择N…

游览器找不到服务器上PHP文件的一种原因

最近在练习搭建网站&#xff0c;遇到游览器找不到服务器上的php文件的问题。后来查找发现&#xff0c;apache文档根目录跟apache虚拟主机文档根目录不同&#xff0c;服务器开启了虚拟主机功能。这导致游览器找不到php文件。使用的环境LAMP 里操作系统和软件版本如下&#xff1a…

华为OD机试真题-数组拼接-2023年OD统一考试(B卷)

题目描述: 现在有多组整数数组,需要将它们合并成一个新的数组。合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉,如果该行不足固定长度或者已经为空,则直接取出剩余部分的内容放到新的数组中,继续下一行。 输入描述: 第一行是每次读…