面向对象\类\对象\封装
程序员文章站
2023-12-26 15:58:15
...
004面向对象\类\方法\private
面向对象实际上是一种编程思想,通过它可以把生活中复杂的事情简单化,从原来的执行者变成了指挥者.面向对象是基于面向过程而言的.
面向对象的三大特征:
- 封装性:把相关的数据封装成一个"类"组件;
- 继承性:是子类自动共享父类的属性和方法,这是类之间的一种关系;
- 多态,增强软件的灵活性和多重性.
类和对象
1.1类
- java语言最基本单位就是类,类似于类型.
- 类是一类事物的抽象
- 可以理解成为模板或者设计图纸
1.2对象
每个对象具有三个特点:对象的状态,对象的行为和对象的标识.
- 对象的状态用来描述对象的基本特征
- 对象的行为用来描述对象的功能
- 对象的标识是指对象在内存中唯一一个地址值用来和其他对象区分开来
- 类是一类事物的抽象,对象是具体的实现
1.3类和对象的关系
- 计算机语言里面怎么描述世界中的事物的?属性+行为
- 怎么通过java语言来描述呢?通过类来描述一类事物,把事物的属性当做成员变量,把行为当做方法
1.4类的创建于使用
package cn.oop;
public class ClassTest {
public static void main(String[] args) {
Phone p = new Phone();
p.call();
p.message();
p.read();
System.out.println(p.brand);
System.out.println(p.color);
System.out.println(p.size);
}
}
class Phone {
String brand ="小橘子";
double size = 5.55;
String color = " 优雅灰";
public void call() {
System.out.println("正在打电话给他");
}
public void message() {
System.out.println("正在发短信给妮妮");
}
public void read() {
System.out.println("正在朗读一段中文");
}
}
1.5对象在内存中的储存
Java把内存分成了5大区域,我们重点关注栈和堆.
- 一般来讲局部变量存在于栈中,方法执行完毕内存就会释放
- 对象(new)出来的东西存在于堆当中,对象不再被使用的时候,内存才会被释放
- 每个堆内存的元素都有默认值
- 对象中的属性都是有默认值的
Tips:
栈与队列指的是一种数据结构:
栈:先进后出(FILO)
队列:先进先出(FIFO)
2.封装
2.1概述:封装是隐藏独享的属性和实现细节,仅仅对外提供公共的访问方式,比如类和方法的好处:提高安全性\提高代码复用性.
2.2private关键字
是一个权限修饰符,可以用来修饰成员变量和成员方法,被私有化的成员变量只能在本类中访问
练习题:封装一个"水果"案例:
package cn.oop;
public class PrivateExample {
public static void main(String[] args) {
Fruit f = new Fruit();
System.out.println(f.name);
System.out.println(f.number);
f.setKind("苹果种");
System.out.println(f.getKind());
f.name = "苹果";
f.number = 100;
f.plant();
}
}
class Fruit {
String name;
int number;
private String kind;
public void plant() {
System.out.println("正在种水果");
flower();//可以在共有的方法里面掉私有方法
}
private void flower() {
System.out.println("水果正在开花");
}
public String getKind() {
return kind;//私有属性添加get/set方法
}
public void setKind(String kind) {
this.kind = kind;
}
}
3.2创建对象的流程
Fruit f = new Fruit();//在这一行代码里面,发生了下列事件:
- 把Fruit.class文件加载进内存
- 在内存中,开辟空间,存放引用变量f
- 在堆内存中,开辟空间,存放Fruit对象
- 对成员变量进行默认的初始化
- 对成员变量进行显示初始化
- 执行构造方法(如果有构造代码块,就吸纳执行构造代码块再执行构造方法)
- 堆内存完成
- 把堆内存的地址值赋值给变量f,f就是一个引用变量,引用了Fruit对象的地址值
4.3匿名对象
没有名字的对象,是对象 的简化表达形式
使用场景:
当被调用的对象只调用一次时(多次调用对象创建多个对象浪费内存)
Demo d = new Demo();
d.eat();
d.study();
也可以写成:
new Demo().eat();
new Demo().study();