面向对象
思考:
怎样拥有一台自己的电脑?
第一种方法:自己组装
一、首先购买配件
1. 挑选主板:华说、技嘉等
2. 挑选 cpu:因特尔、AMD...
3. 挑选显卡:9600GT等。。。。。。
4. 。。。。。。
二 、组装配件
三、安装系统
四、。。。。。。
第二种方法:
找一个懂电脑的人帮助挑选电脑(自己不用懂),懂电脑的人会帮你解决问题。
我们现在来对比这两种方法
第一种方法需要自己懂电脑,还要买各种配件,买好以后还要自己组装配件安装系统等等。
第二种方法不需要自己懂电脑,也不需要挑选各种配件等,只需要找到你个懂得电脑的人告诉他需求就可以了。
相比较之下当然是第二种方法最省事了。
第一种方法是自己从买配件一直到组装成功这是一个组装电脑的过程。所以应用到JAVA的语言里面我们叫它面向过程。
第二种方法是找到一个懂的电脑的人帮助你买电脑就可以了。这种方式省时省力,所以这样的方式在JAVA的语言里我们叫它面向对象。也就是说懂电脑的人就是对象那么今天说的就是面向对象。
面向对象的特点:
1、将复杂的问题简单化;
2、从事物的 执行者 到事物的 指挥者
3、面向对象思想是更贴近人思考问题的思想
面向对象的特征:
1、封装
2、继承
3、多态
在JAVA中最基本的单位是:类 class
成员变量(实例变量): 相当于属性
书写位置: 在类中、方法外
成员方法:相当于行为
书写位置:目前成员方法跟函数写法一样只是少一个static
面向对象的设计:
1、维护 类和对象之间的关系
2、不断地操作对象,适用对象、指挥对象去完成一些功能
需求:写一个学生类
成员变量:姓名、年龄、性别
成员方法:吃饭、睡觉、听课
//创建一个学生对象
//数据类型 变量名 = 初值
//类名 对象名 = 初值:new 类名();new(堆内存里面创建新空间)
//new一次 产生一个对象
public class StudentDemo{
public static void main(String[] args) {
Student stu = new Student(); //new属于堆内存
//使用成员变量: (对象) . (成员变量)
stu.name = "wangning";
stu.age = 18;
stu.gender ="男性";
System.out.println(stu.name);
System.out.println(stu.age);
System.out.println(stu.gender);
//注意:调用无参数方法 括号必须带上
stu.eat();
stu.sleep();
stu.lesson();
}
}
//类中、方法外:成员变量书写位置——
//创建了一个Student类
//在同一个文件下 可以有很多类
//只能有一个public定义的类
//* 需求:写一个学生类
//* 成员变量:姓名、年龄、性别
//* 成员方法:吃饭、睡觉、听课
class stu{
//成员变量
string name;
int age;
string gender;
// 成员方法
// 关键字 返回值类型 方法名(参数列表){方法体}
public void eat(){
system out println("吃饭");
}
public void eat(){
system out println("睡觉");
}
public void lesson(){
system out println("上课");
}
//需求:创建一个类 Car类
//有名字、颜色、轮胎数量、排气量、可以行使
//可以震一下 可以存放物品
//增加成员方法、增加一个介绍自己的方法
public class CarDemo {
public static void fun1(int num) {
System.out.println(num);
}
//参数是引用数据类型时 如何传参
//你要什么?我就给你什么
public static void fun2(Car car) {
car.name = “吉利”;
car.color = “粉红色”;
car.sayhi();
}
public static void main(String[] args) {
fun1(123);
//初始化、创建一个 car
Car car = new Car();
fun2(car);
System.out.println(car.name);
// //car 的地址穿进去
// //创建一个对象(初始化一个对象)
Car car1 = new Car();/成员变量/
car1.name = “布加迪”;
car1.color = “红色”;
car1.tyre = 5;
car1.air = 5;
System.out.println(car1.name);
System.out.println(car1.color);
System.out.println(car1.tyre);
System.out.println(car1.air);
//思考;两个对象 在内存中的表现
Car car2 = new Car();
car2.name = “兰博基尼”;
car2.color = “蓝色”;
car2.sayhi();
System.out.println(car2.name);
System.out.println(car2.color);
//引用了car2的地址和空间 两个对象三个引用;
Car car3 = car2;
car3.sayhi();
}
}
/*
* 区别:
*
*书写位置不同
* 局部变量:在方法中 或者 在方法的声明中
* 成员变量:在类中 方法外
*初始化值不同
* 局部变量:必须给定初始值 才能进行使用
* 成员变量:只要你创建了对象 就会有默认的初始值
*
*内存存在的位置不同
* 局部变量:存在站区
* 成员变量:储存在堆内存中
*
*声明周期不同(出生到死亡):
* (对变量的访问时 要考虑一下声明周期问题 是否可以访问)
* 局部变量:随着方法的入栈而出生 随着方法的出栈而死亡
* 成员变量:随着对象的出生而出生 随着对象的死亡而死亡
*
*/
class Car{
//声明程序员变量时 可以给一个初值
// 成员变量
String name ;
String color;
int tyre ;
int air ;
public void use(int a/*局部变量*/){
int nam;//局部变量
System.out.println("可以行驶");
}
public void zyx() {
System.out.println("车震");
}
public void yt() {
System.out.println("存放");
}
//介绍自己的方法
public void sayhi() {
System.out.println(name + "-----" + color);
}
}
匿名对象
public class PersonDemo {
//赋值name 调用sayhi
public static void fun(String name,Person p) {
p.name = name ;
p.sayhi();
}
public static void main(String[] arge){
Person p1 = new Person();
p1.name = "梁哥";
p1.sayhi();
Person p2 = new Person();
p2.name = "武汉";
p2.sayhi();
//相同语句 可以抽成一个方法
//增加代码的复用性
Person p3 = new Person();
fun("张三", p3);
for (int i = 0; i < 10; i++) {
fun("李四", new Person());
}
//匿名对象
//好处:节省代码、使用方便
//用处:当你只调用一个方法的时候使用
// 如果你反复调用一个方法的时候,比较浪费内存空间
new Person().sayhi();
new Person().name="卫星";
new Person().sayhi();
}
}
class Person{
String name;
int age;
//介绍自己的方法
//
public void sayhi() {
System.out.println(name + “—-” + age);
}
}
封装
public class PhoneDemo {
public static void main(String[] args) {
Phone phone = new Phone();
phone.setName("oppo");
phone.color = "黑的";
phone.sayhi();
System.out.println(phone.getName());
phone.fun();
Phone phone3 = new Phone();
phone3.setName("华为");
System.out.println(phone3.getName());
}
}
/*
* pritave(权限修饰符) 系统关键字
* 属性添加了pritave 这个关键字 变成私有属性
* 私有属性 本类中 可以访问 本类以外访问不到
*
* 如何人访问pritave 修饰的成员变量
* 1、获取
* 2、修改
*
* java bean 写实体类的规范
* 成员变量私有化 是封装的一种表现形式
* 私有化之后 必须要写 set/get方法
*/
class Phone{
private String name;
String color;
//通过这个方法来修改属性
//获取值:get。。。。。。方法名字
//修改值: set。。。。。。方法名字
public void setName(String name) {
//修改属性的值
//this 关键字:代表本类的对象 对象.属性
//this.name 获取就是 成员变量的name
this.name = name;//跟成员变量有关系吗?
}
//获取name
public String getName() {
return this.name ;
}
//
public void sayhi() {
System.out.println(this.name + "---" + color);
}
//就近原则
public void fun() {
String name = "vivo";
System.out.println(name + "下");
}
}