目录
一、自定义类
二、创建对象练习
三、成员变量与局部变量
四、匿名对象
五、面向对象的三大特征之继承
六、面向对象练习
一、自定义类
package cn.test.java;
/** 知识梳理* * Java是一种面向对象的语言* C 是一种面向过程的程序设计语言* * 类:本质是对某种类型事物的共同属性与行为的抽取* * 现实中: 对象 ----- 类* Java中: 类 ----- 对象* * 面向对象的计算机语言的核心思想:找合适的对象做合适的事* * 如何找合适的对象:* 自定义类,通过自定义类来创建对象使用,* 调用sun已经定义好的类* * 自定义类创建对象三个步骤:* 1.自定义类* Class 类名{* 事物的公共属性 成员变量描述* 事物的公共行为 函数描述* }* * 2.通过自定义创建对象* 类名 变量名 = new 类名():* * 3.访问(设置)对象的属性或者对象的功能* 访问对象的属性:对象.属性名* 设置对象的属性:对象.属性 = 数据* 调用对象的功能: 对象.函数名();* * * */public class Demo01 {public static void main(String[] args) {Car c = new Car(); //调用Car类 或 实例化对象// 设置车对象的属性值c.Name ="BYD";c.Color ="white"; c.Wheel= 4;//访问车属性的属性值System.out.println("CarName:" + c.Name + " " +"CarColor:" + c.Color + " " + "Whells:" + c.Wheel);}}
class Car{//事物公共属性使用成员变量描述String Name; // 名字的属性String Color; // 颜色属性int Wheel; // 车轮数//事物的公共行为使用函数描述public void run(){System.out.println(Name + "我的车轮飞起来了,,,");}
}
二、创建对象练习
package cn.test.java;
/*需求: 使用java描述一个车与修车厂两个事物, 车具备的公共属性:轮子数、 名字、 颜色 ,还
具备跑的功能行为。跑之前要检测轮子是否少于了4个,如果少于了4个,那么要送到修车厂修理,
修车厂修理之后,车的轮子数要补回来4个。 然后车就继续的跑起来。修车厂: 具备公共属性: 名字、 地址、 电话。公共的行为: 修车。初学者的经典错误:1. 变量在同一个作用域(大括号)上是可以直接访问的。2. 如果一个类要访问另外一个类变量时,那么这时候就只能通过创建对象进行访问。(仅对于目前正确)*/public class Demo02 {public static void main(String[] args) {//创建车对象Car1 c = new Car1();c.Name = "DX";c.Color = "White";c.Wheel = 4;for(int i = 0; i<100; i++){ //调用100次c.run();c.run();}//车轮少一个c.Wheel = 3;c.run();//创建修车厂对象CarFactory F = new CarFactory();F.Name = "Garage";F.Address = "XiangTan";F.Tel = "885258";F.reqair(c); //c.run();}
}
class Car1{String Name; //车的名字String Color; // 车的颜色int Wheel; // 车轮数public void run(){if(Wheel >= 4){System.out.println("可以正常行驶");}else{System.out.println("不能正常行驶,快去修理厂");}}}
class CarFactory{String Name;String Address;String Tel;public void reqair(Car1 c){if(c.Wheel >=4){System.out.println("告诉你,费了很大力气修好了,给钱");}else{c.Wheel = 4;System.out.println("修好了,给钱!!"); }}
}
三、成员变量与局部变量
-
package cn.test.java; /** 知识梳理* * 成员变量与局部变量的区别* 定义位置上的区别:* 成员变量是定义在方法之外,类之内的* 局部变量是定义在方法之内的* * *作用上的区别:* 成员变量的作用是描述一类事物的公共属性* 局部变量的作用是提供一个变量给方法内部使用* * 生命周期的区别:* 成员变量是默认的初始值* 数据类型 默认的初始值* int 0* float 0.0f* double 0.0* boolean false* char ''* String(应用数据类型) null* * 局部变量是没有默认的初始值的,必须要先初始化才能使用。* */public class Dome03 {public static void main(String[] args) {//创建对象Person P = new Person();P.eat(); // 调用方法} } class Person{String Name;// 成员变量public void eat(){int age; // 局部变量age = 12;for(int i = 0; i < 5; i++){System.out.println("Hello World:" + age);}} }
四、匿名对象
package cn.test.java;
/** 匿名对象:没有引用类型变量指向的对象称 作匿名对象。* * 需求:使用Java类描述一个学生类* * 匿名对象注意的事项:* 我们一般不会给匿名对象赋予属性值,因为永远无法获取到* 两个匿名对象永远都不可能是同一个对象* * 匿名对象的好处:简化书写* * 匿名对象的应用场景:* 如果一个对象需要调用一个方法一次的时候,而调用完这个方法之后,该对象就不再使用了,这时候可以使用匿名对象。* * 可以作为实参调用一个函数* */
public class Demo04 {
public static void main(String[] args) {// 创建一个学生对象// Student Stu = new Student();new Student().Name = "狗剩"; // 匿名对象 没有引用类型变量指向的对象 给匿名对象赋的值永远获取不到System.out.println("输出匿名对象的属性:" + new Student().Name); // 返回nullSystem.out.println(new Student() == new Student()); // "==" 用于引用类型变量时,比较的是内存地址。判断两个 对象是否为同一个对象//两个匿名对象永远都不可能是同一个对象,因为不确定引用类型Student Stu = new Student();Stu.study(); // 对象.方法new Student().study();
}
}
class Student{int Num; // 学号String Name;public void study(){System.out.println("好好学习,天天向上");}
}
五、面向对象的三大特征之继承
package cn.test.java;
/** 面向对象的三大特征* 封装* 继承* 多态* * 需求:使用Java描述百度网的会员* * 问题:性别有问题??* * 根本原因:由于其他人可以直接操作sex属性。可以对sex属性进行了直接的赋值。* * 封装:* 权限修饰符:权限修饰符 控制变量可见范围* public:公共的 public修饰的成员变量或者方法任何人都可以直接访问。* * private:私有的 。private修饰的成员变量或者方法只能在本类中进行直接访问。* *封装的步骤:*1.使用private修饰需要封装的属性*2.提供一个公共的方法设置或者获取该私有的成员属性* 命名规范:* set属性名();* get属性名();* * 封装不一定要提供get()或者set()方法,根据需求而定* * 规范:在现实开发中一般实体类的所有成员属性(成员变量)都要封装起来** 实体类:用于描述一类事物的类* * 封装的好处:* 1.提高数据的安全性* 2.操作简单* 3.隐藏了实现* */public class Demo05 {public static void main(String[] args) {BaiDu BD = new BaiDu();BD.Name = "狗剩";BD.SetSex("女");BD.Salary =8000;System.out.println("姓名:"+ BD.Name + " 性别:" + BD.GetSex() + " 薪资" + BD.Salary);}}
class BaiDu{public String Name; // 名字 公共属性 成员变量private String Sex; // 性别 私有属性public int Salary; // 薪资 公共属性//定义一个公共的方法设置Sex属性public void SetSex(String S) {// void表示没有返回值类型if(S.equals("男") || S.equals("女")){//短路或(or)表达1为true则整个表达式为true,不再运算第二个表达是,Sex = S;}else{Sex = "男"; // 默认为男}}//定义一个公共的方法获取Sex属性public String GetSex(){return Sex;}//聊天public void Talk(){System.out.println(Name + "聊得非常开心");}
}
六、面向对象练习
/*
需求: 使用java类描述一个计算器类,计算器具备操作数1, 操作数2 、操作符三个公共 的属性
,还具备计算的功能行为。 要求: 不能直接对操作数1,操作数2,运算符这些属性进行直接 的赋值,要封装起来。 (+ - * / )根据需求提供get或者set方法。需要提供set方法
*///计算器类
class Calculator{private int num1; //操作数1private int num2; //操作数2private char option ; //运算符//提供公共的方法设置属性值.... public void initCalculator(int n1 , int n2 , char o){num1 = n1;num2 = n2;if(o=='+'||o=='-'||o=='*'||o=='/'){option = o;}else{option = '+'; }}//计算的功能public void calculate(){switch(option){case '+':System.out.println("做加法运算,结果是:"+(num1+num2));break;case '-':System.out.println("做减法运算,结果是:"+(num1-num2));break;case '*':System.out.println("做乘法运算,结果是:"+(num1*num2));break;case '/':System.out.println("做除法运算,结果是:"+(num1/num2));break;}}}class Demo6
{public static void main(String[] args) {//创建了一个计算器对象Calculator c = new Calculator();//设置属性值c.initCalculator(1,2,'a');//调用计算器的计算功能c.calculate();}
}