什么是面向对象
面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象(万物皆对象)。
面向对象本质就是基于面向过程的!
什么是面向过程? 代表语言就C语言
面向过程的思想:(亲力亲为的)
1)拿到一个需求,分析步骤
2)代码实现, 中间完成代码中的逻辑判断....
3)写完之后在测试!
比如:
键盘录入三个数据,比较三个数据中最大值(方法完成)
1)需要借助于jdk提供的Scanner来进行键盘录入
(整个过程录入细节-->面向对象)
2)定义比较三个数据中最大值的方法
2.1) 两个明确
明确返回值类型 :int
明确参数类型: 三个参数,都是int
2.2)完成方法的业务逻辑
要么是分步骤三元运算符实现
要么直接if...else...嵌套实现
3)main方法中调用getMax(实际参数列表); 返回结果输出;
面向对象的思想特点(不是面向对象特征)
1)更符号我们生活中的思想行为习惯
2)让复杂的事情简单化
3)我们从执行者变成了指挥者!
面向对象的三大特征:封装,继承,多态!
面向对象设计原则?
就是不断的创建对象,使用对象,指挥对象做事情!
比如:
Scanenr类:键盘录入
可以不断的创建键盘录入对象,不断的去使用这个scanner对象
帮助我们完成录入的其他类型数据!
类和对象的关系
相辅相成
类和事物:一一对应的
类:---描述一组事物(泛指)的实行和行为的
xxx事物
属性有哪些
行为有哪些对象:是描述具体的事物
通过代码体现 类名 对象名 = new 类名() ;
对象名访问成员变量
对象名调用成员方法
Java中最基本的单元----"类"
什么是类呢?
类---就是描述现实世界事物的属性和行为的统称!
类,是描述一组事物的属性和行为的集合! (官方的概念)现实世界事物---->学生,老师,运动员,教练,军人,工人....猫,狗....等等
举例:
学生事物
属性:姓名,年龄,性别,身高,爱好... ----对应 类中的成员变量
行为:学生的行为---吃,睡,玩,学习等等 ----对应的类中的成员方法
public void study(){}
成员方法:今天写成员方法的时候,去掉static(之前怎么写还怎么写)
public 返回类型 方法名(参数类型1 变量名1,参数类型2 变量名2....){
有返回值类型需要return
没有返回值类型,返回值类型void ,此处直接输出结果;
}
需要使用代码体现出来现实世界的事物//class 类名(见名知意){ } //定义学生类 class Student{ //成员变量----就是描述现实世界事物的属性(类中,方法外定义的变量) String name; //姓名 int age ;//年龄 String gender ; //性别 //.. //成员方法---行为 public void study(){//学习 System.out.println("我们正在学习JavaSE之面向对象...") ; } //睡觉 public String sleep(){ return "学生正在睡觉" ; } //吃饭... public void eat(){ System.out.println("学生正在吃饭...") ; } }
上面的描述"学生事物"----属性和行为
分别使用代码体现出---学生事物("泛指") ---定义了一个Student类
我们并没有给出具体的学生是谁?----->具体的事物才能体现出来他具体的姓名,年龄,性别
具体的学生信息
张三
20
男
具体的学生事物----使用代码体现出来---就是 创建对象
类名 对象名 = new 类名() ; 固定格式
对象名.成员变量(属性) = 赋值; 注意数据类型
对象名.成员方法(行为) ; //有返回值,返回结果;没有返回值,直接单独调用
Student student = new Student() ;
null 0
System.out.println("学生 姓名是:"+student.name+",年龄是"+student.age+",
性别是:"+student.gender) ; null
student.name = "高圆圆" ; //
student.age = 42 ;
student.gender = "女" ;
System.out.println("学生 姓名是:"+student.name+",年龄是"+student.age+",
性别是:"+student.gender) ;
student.study() ;
String result = student. sleep() ;
System.out.println(result) ;
student.eat();
/*
需求:
描述学生事物,
学生事物的属性:姓名,年龄,性别
学生事物的行为:主要学习,吃饭,睡觉...
分析:
1)定义一个学生类--描述学生事物
成员变量: 类中方法外
属性:姓名,年龄,性别
成员方法:去掉了static
study(),sleep(),eat()
2)然后在测试类StudentDemo中进行测试
*///学生类 class Student{ //成员变量(类中方法外)--事物的属性(都是小写,满足小驼峰命名法即可)(一一对应的) //姓名,年龄,性别 String name; //姓名 int age ; //年龄 String gender ;//性别 //成员方法:去掉了static public void study(String content){//参数为:学生学习的"课程名称" System.out.println("学生正在学习"+content) ; } //吃饭 public void eat(String str){ System.out.println("学生正在"+str) ; } } //测试类 class StudentDemo{ public static void main(String[] args){ //测试学生类---描述具体的事物 //创建学生对象--描述具体的事物 //格式:类名 对象名 = new 类名() ; Student student = new Student() ; //对象名student:访问成员变量 System.out.println(student.name+"----"+ student.age+"---"+student.gender) ; //null----0---null System.out.println("----------------------------") ; //给成员变量赋值 student.name = "高圆圆" ; student.age = 42 ; student.gender = "女" ; System.out.println(student.name+"----"+ student.age+"---"+student.gender) ; student.study("JavaSE"); student.eat("吃鸡") ; } }
/*
需要使用面向对象的编程方式:来描述手机事物
手机事物
属性:品牌 ,价格 ,机身颜色,机身内存..
行为:打电话,发短信,玩游戏,学习...
分析:
定义一个手机类----来描述现实世界事物的"手机事物"
成员变量---属性:
品牌: brand;
价格 price ;
颜色 color ;
内存 memory ;
行为:
callPhone(String name),name:某个人的名称
sendMsg(String name), 给name 打发短信
playGame():玩游戏
study():学习
*///定义一个手机类 class Phone{ //成员变量---类中方法外定义的变量 String brand ; //品牌 int price ; //价格 String color ; //颜色 String memory ; //机身内存 //成员方法:去掉static ///callPhone(String name),name:某个人的名称 public void callPhone(String name){ System.out.println("使用手机正在给"+name+"打电话") ; } //sendMsg(String name), 给name 打发短信 public void sendMsg(String name){ System.out.println("使用手机给"+name+"发短信") ; } // playGame():玩游戏 public void playGame(String gameName){ System.out.println("使用手机玩"+gameName); } } //手机类的测试类 class PhoneTest{ public static void main(String[] args){ //手机类定义完毕,需要创建具体的事物来描述具体的手机 //创建一个手机类对象 Phone phone = new Phone() ;//Phone@6d06d69c 地址值 System.out.println(phone) ; System.out.println(phone.brand+"---" +phone.price+"---"+phone.color+"---"+phone.memory) ; //赋值 phone.brand = "华为mate30pro" ; phone.price = 6799 ; phone.color = "翡翠绿" ; phone.memory = "128G" ; System.out.println(phone.brand+"---" +phone.price+"---"+phone.color+"---"+phone.memory) ; //打电话 phone.callPhone("高圆圆") ; //发短信: //public void sendMsg(String name) phone.sendMsg("张佳宁") ; //public void playGame(String gameName) phone.playGame("csgo") ; } }
private关键字
/**
* private关键字的特点:
*
* private访问的权限:范围是最小的:仅限当前类中!
* 被private修饰的成员变量/成员方法,只能在当前类中访问
* 外界类不能直接访问!
* 但是,可以间接的通过公共访问 来访问!
*///定义一个类 class Demo{ //公共的成员变量 public int num ; private int num2 = 200;//private修饰的 //私有的成员方法,也只能在本来访问 private void method(){ System.out.println("method Demo..."); } //公共成员方法 public void function(){ method(); //公共访问间接访问私有本来私有方法 System.out.println("====================="); System.out.println("function Demo"); } //公共成员方法 public void show(){ System.out.println(num); System.out.println(num2);//num2私有的 } } //测试类 public class PrivateDemo { public static void main(String[] args) { //访问Demo类中的num变量? Demo d = new Demo() ; d.num = 20 ; System.out.println(d.num); //System.out.println(d.num2);//此处访问不到 System.out.println("--------------------------"); d.show(); //公共访问 // d.method() ;//method方法是私有的,无法访问的! d.function(); } }
/**
* 需要描述一个学生事物,学生事物--有姓名,和年龄两个属性
* 写一个测试类,测试学生的信息
*
*
* 通过上面的测试,发现问题,我给学生的年龄赋值一个负数,不合适!
*
* 需要改进这个程序:
* 可以定义成员方法:为了校验这个年龄的合法范围
* 如果它在<0 或者>150 ,提示"非法数据"
* 否则的话,就可以将变量赋值给成员变量age
*
* 这个方法定义在Student类中还是定义在测试类中?
* Student类中
*
*
* 虽然定义了,但是在测试中的时候可以不用!依然会输出非法数据 年龄负数!
*
* 所以Java中有技术----->封装!
*
* 封装:就是将一个事物中的属性私有化,(对外私有),----
* 说白了,代码中体现 将一个类中的所有的成员变量加入关键字private
* 保证了数据安全性,对外提供的公共的访问方法来访问,并不能直接访问!
*
* 公共方法:
* setXXX()getXXX()方法----称为"setter and Getter"
*
*
*///定义一个学生类 class Student{ //成员变量(属性) String name ; //姓名 默认null private int age ; //年龄 默认0 //定义一个校验年龄的成员方法 public void setAge(int a){ if(a<0 || a> 150){ System.out.println("对不起,数据非法!"); }else{ age = a ; } } //单独定义一个成员方法,输出学生的信息 public void showStudent(){ System.out.println("学生的姓名是:"+name+",年龄是:"+age); } } //测试类 public class StudentTest { public static void main(String[] args) { //测试学生 //正常数据 //类名 对象名 = new 类名() ; Student student = new Student() ; student.name = "高圆圆" ; // student.age = 42 ; //age已经私有化了,不能访问了! //访问成员方 student.showStudent(); System.out.println("---------------------") ; //在创建一个新的学生 Student student2 = new Student() ; student2.name = "赵又廷" ; //student.age = -45 ;//改进 这种数据被更改了负数,不安全! student2.setAge(-45); //现在调用刚才的方法 student2 .showStudent(); System.out.println("---------------------------") ; //创建一个学生,不用你的方法,依然输出的有非法数据! Student student3 = new Student() ; student3.name = "张三丰" ; // student3.age = -100 ;//以后这些数据都是来源于数据库的有效数据! student3.showStudent(); } }
文章评论