JAVA基础7——面向对象
面向对象
面向对象 是基于 面向过程 的编程思想
面向对象思想
面向对象 与 面向过程 区别和联系。
区别:
- 面向过程 关注执行过程,这个时候我们是执行者。
- 面向对象 关注的是最终功能,这个时候我们是指挥者。
联系:
面向对象 是基于 面向过程 的。
面向对象开发
就是不断的创建对象,使用对象,指挥对象做事情。
面向对象设计
其实就是在管理和维护对象之间的关系。
面向对象特征
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
类与对象及其使用
类:是一组相关的属性和行为的集合
对象:是该类事物的具体体现
举例:
类 学生
对象 班长就是一个对象
现实世界的事物
属性 人的身高,体重等
行为 人可以学习,吃饭等
Java中用class描述事物也是如此
成员变量 就是事物的属性
成员方法 就是事物的行为
定义类其实就是定义类的成员(成员变量和成员方法)
格式
成员变量:和以前变量的定义是一样的格式,但位置不同,在类中方法外
成员方法:想以前方法的定义是一样的格式,但是先把static去掉.
创建对象:
类名 对象名 = new 类名();
对象名.成员变量;
对象名.成员方法;
- 一个java文件中写两个类: 一个是基本类, 一个是测试类.
- 文件名要跟测试类名一致
class phone {
String color; //颜色
int price; //价格
String brand; //品牌
public void call(String name){
System.out.println("打电话给"+name);
}
public void internet() {
System.out.println("上网");
}
public void playGame(){
System.out.println("玩游戏");
}
}
class DemoPhone {
public static void main(String[] args) {
phone h=new phone();
h.price=5000;
h.color="白色";
h.brand="华为";
System.out.println(h.brand+" "+h.color+" "+h.price);
h.call("x");
h.internet();
h.playGame();
}
}
对象的内存图
一个对象
两个对象
三个对象
/*
手机的属性 颜色,价格,品牌
手机的功能 通信,上网,打游戏
手机类
成员变量 颜色,价格,品牌
成员方法 通信,上网,打游戏
*/
class phone {
String color; //成员变量 颜色
int price; //成员变量 价格
String brand; //成员变量 品牌
public void call(String name){ //成员方法 通信
System.out.println("打电话给"+name);
}
public void internet() { //成员方法 上网
System.out.println("上网");
}
public void playGame(){ //成员方法 打游戏
System.out.println("玩游戏");
}
}
class DemoPhone {
public static void main(String[] args) {
//类名 对象名=new 类名()
phone h=new phone();
//对象名.成员变量
h.price=4999;
h.color="白色";
h.brand="华为";
System.out.println(h.brand+" "+h.color+" "+h.price);
//对象名.成员方法
h.call("x");
h.internet();
h.playGame();
System.out.println("-------------");
phone x=new phone();
x.price=3299;
x.color="蓝色";
x.brand="小米";
System.out.println(x.brand+" "+x.color+" "+x.price);
x.call("y");
x.internet();
x.playGame();
System.out.println("-------------");
phone p=h;
System.out.println(p.brand+" "+p.color+" "+p.price);
System.out.println("-------------");
p.price=7299;
p.color="黑色";
p.brand="苹果";
System.out.println(h.brand+" "+h.color+" "+h.price); //注意这里打印的是华为,输出结果却是苹果
//因为操作的是同一个地址值
p.call("z");
p.internet();
p.playGame();
}
}
成员变量和局部变量的区别
-
在类中位置不同
- 成员变量: 在类中方法外
- 局部变量: 在方法声明中或者方法声明外
-
在内存中的位置不同
- 成员变量: 在堆内存中
- 局部变量: 在栈内存中
-
生命周期不同
- 成员变量: 随着对象的创建而存在,随着对象的消失而消失
- 局部变量: 随着方法的调用而存在,随着方法调用的结束而消失
-
初始化值不同
- 成员变量: 有默认初始化值
- 局部变量: 没有默认初始化值,必须定义赋值,才能使用
注意
- 局部变量名称可以跟成员变量名称一样,在方法中使用的时候,采用就近原则
- A方法不能访问B方法内部的局部变量
class variable{
int num;
public void show(){
int num=100; //注释这里结果会发生改变
System.out.println(num)
}
}
输出结果为
100
若注释第五行代码则输出结果为
0
方法的形式参数的调用
基本类型: 形式参数的改变不影响实际参数
引用类型: 形式参数的改变直接影响实际参数