- Java是一门面向对象的语言
-
面向对象与面向过程都是一种思想
-
面向过程强调的是过程,凡是亲历亲为
-
面向对象OOP强调的是结果,我们是指挥着,不是执行者
-
比如:
面向过程强调的是过程,比如,把大象装冰箱,一共分3步:
第1步:打开冰箱门
第2步:把大象放进去
第3步:关上冰箱门
而面向对象强调的是结果,比如:
什么样的冰箱?什么样的大象?谁负责把大象装进去?
有没有发现,如果是面向对象的话,干这件事的主体并不是你自己,你变成了一个指挥者?
练习:测试面向对象入门案例
入门案例思路
- 创建一个默认修饰符的class Phone--用来描述手机这一系列事物
- 在手机类中定义属性--成员变量
- 在手机类中定义功能--方法
- 在公共类中创建手机类的对象Phone p = new Phone();
- 使用对象调用方法 p.call();
- 给对象的属性赋值 p.brand = "HUAWEI";
package ningbo.oop;
/**
* @Author 宁铂
* @Date 2021/7/8 9:43
* @Version 1.0
*/
public class TestCreateClass {
/** 本类用于测试面向对象的入门案例
* 需求:设计手机这一类事物
* 特性:品牌 价格 尺寸 颜色
* 功能:打电话 发短信 看直播
* */
/** 在一个Java文件中可以创建多个class
* 但被public修饰的class只有一个
* 而且这个公共的名字就是文件的名字
* */
public static void main(String[] args) {
/** 通过new关键字来创建对象 */
Phone phone = new Phone();
/** 通过 。 来来调用功能 */
phone.call();
phone.message();
phone.video();
/** 查看对象的属性值并赋值 */
System.out.println(phone.brand = "HUAWEI");
System.out.println(phone.price = 9999.99);
System.out.println(phone.size = 8.0);
System.out.println(phone.color = "中国红");
}
}
/** 通过class关键字创建一个手机类 -- 描述手机这一类事物 */
class Phone{
/** 使用成员变量来描述特征 */
String brand; //品牌
double price; //价格
double size; //尺寸
String color; //颜色
/** 类的方法来描述功能 */
public void call(){
System.out.println("正在打电话");
}
public void message(){
System.out.println("正在发短信");
}
public void video(){
System.out.println("正在看直播");
}
}
类和对象
类:
- Java语言最基本单位就是类,类似于类型。
- 类是一类事物的抽象。
- 可以理解为模板或者设计图纸。
对象
每个对象具有三个特点:对象的状态,对象的行为和对象的标识。
- 对象的状态用来描述对象的基本特征。
- 对象的行为用来描述对象的功能。
- 对象的标识是指对象在内存中都有一个唯一的地址值用来和其他对象区分开来
- 类是一类事物的抽象,对象是具体的实现。
注意:对象是具体的,是根据设计图纸(类)制作出来的对象
package ningbo.oop;
/**
* @Author 宁铂
* @Date 2021/7/8 10:56
* @Version 1.0
*/
public class TestCreateClass2 {
/** 本类用于练习面向对象入门案例2
* 用于描述汽车的事物
* */
public static void main(String[] args) {
Car car = new Car();
String a = car.brand = "BMW";
String b = car.color = "五彩斑斓的黑";
double c = car.price = 9999999.9;
System.out.println("我的 "+a+" 颜色是 "+b+" 售价高的吓人! 总共要 "+c+" 美元");
car.start();
car.stop();
}
}
/** 创建类,来描述汽车 */
class Car{
//特征
String brand;
String color;
double price;
//功能
public void start(){
System.out.println("我的车车启动了!!!");
}
public void stop(){
System.out.println("哎呀,熄火了···");
}
}
对象在内存中的存储
Java把内存分成5大区域,我们重点关注栈和堆。
- 一般来讲局部变量存在栈中,方法执行完毕内存就被释放
- 对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
- 每个堆内存的元素都有地址值
- 对象中的属性都是有默认值的
注意:栈与队列指的是一种数据的结构。
- 栈:先进后出(FILO – First In Last Out)
- 队列:先进先出(FIFO – First In First Out)
- 封装: 把相关的数据封装成一个“类”组件
- 继承: 是子类自动共享父类属性和方法,这是类之间的一种关系
- 多态: 增强软件的灵活性和重用性
概述
封装是隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式,比如类和方法
- 将一类事物的特征与功能封装成一个“类”组件
- 限制属性/方法的使用
private关键字
是一个权限修饰符 ,可以用来修饰成员变量和成员方法.被私有化的成员只能在本类中访问
属性的封装
- 用private修饰属性
- 提供对应的get与set()
- 右键空白处->Generate->Getter and Setter->选中属性-ok
使用封装的属性
- 给封装的属性设置值:setXxx()--设置值的时候需要传参数
- 获取封装的属性值:getXxx()
方法的封装:--不常使用
- 用private修饰方法
- 可以在同类中的公共方法里调用这个私有方法
- 这样就可以在其他类中,创建对象,调用公共方法
package ningbo.oop;
/**
* @Author 宁铂
* @Date 2021/7/8 16:10
* @Version 1.0
*/
public class TestPrivate {
/** 测试面向对象的封装
* 练习属性的封装
* */
public static void main(String[] args) {
Student student = new Student();
student.setId(1);
student.setName("奔波儿灞");
student.setSubject("巡海");
System.out.println(student.getId()+"号学员 "+student.getName()+" 每天都任务就是: "+student.getSubject());
student.study();
}
}
class Student{
private int id; //学号
private String name; //姓名
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/** 被private 修饰的资源是私有资源
* 私有资源只能在本类中访问,外部无法访问 */
private String subject; //科目
/** 返回值类型
* 方法西亚一个返回值,那么可以通过return关键字返回
* 返回值 subject 必须与返回值类型 string 保持一致
* */
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void study(){
System.out.println("别闹,学习呢~~~~");
play();
}
private void play(){
System.out.println("学习之余,调剂一下~~~~");
}
}
练习:面向对象第一天综合练习
package ningbo.oop;
/**
* @Author 宁铂
* @Date 2021/7/8 17:06
* @Version 1.0
*/
public class TestOOP {
/** 本类用于面向对象第一天综合练习 */
public static void main(String[] args) {
Person person = new Person();
person.setName("安吉拉");
person.setAge(18);
person.setGender("白富美");
person.setHeight(1.68);
person.setAddress("HongKong");
System.out.println(person.getName());
System.out.println(person.getAge());
System.out.println(person.getAddress());
System.out.println(person.getHeight());
System.out.println(person.getGender());
person.study();
}
}
class Person{
private String name;
private String gender;
private double height;
private String address;
private int age;
private void eat(){
System.out.println("干饭人,干饭魂~");
}
public void study(){
System.out.println("保持学习的习惯~");
eat();
}
/** 为属性提供get和set方法 */
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}