第一章:什么是面向对象
一 面向对象的定义
1.1 面向对象
面向对象:是一种思想,思维,即思考方式的角度。
1.2 面向对象与面向过程的区别
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
可以拿生活中的实例来理解面向过程与面向对象,例如把大象装进冰箱,面向过程的设计思路就是首先分析问题的步骤:1、冰箱门打开;2、大象装进去;3、冰箱门关上。然后针对这些过程使用不同的方法来实现。 而面向对象的设计思路就是:1、对象冰箱开门;2、冰箱装进(传入大象);3、冰箱关门。
面向过程: 关注"我该如何实现?",直面实现步骤,面相过程
面向对象: 关注"我该找谁实现?",不关注对象如何实现,值关注对象本身
面向对象是依托于面向过程的
1.3 面向对象的优点
将复杂的问题简单化
更贴近现实生活中人类的思维角度
面向过程适用于执行者,面向对象适用于管理者
1.4 类与对象
1.4.1对象
对象:通过对象表示生活中真实存在的事物或实例。比如:手机,冰箱,大象,汽车。
1.4.2类
类:表示图纸或模板,所以又称为图纸类,模板类,实体类。比如:造汽车需要的图纸,手机设计图纸。
1.4.3类的定义
分析:
1.手机都能做什么? 功能: 打电话 打游戏 聊天 .... 动词 --> 成员方法(不被static修饰)
2.手机有属性|特征? 属性: 品牌,颜色,尺寸,价格... 名词 --> 成员变量(存在于对象的堆内存中,所以必须跟随对象使用)
注意: 先有类才有对象,跟随类创建对象。
public class 类名{
//1.属性-> 成员变量
修饰符 数据类型 变量名 = 赋值;
修饰符 数据类型 变量名;
.....
//2.功能-> 成员方法(不被static修饰)
public void|返回值类型 方法名(参数列表){
实现功能的代码;
[return 返回值;]
}
...
}
1.4.4创建对象
1.导包 : 指明要使用类型的位置 不需要导包的类型: 1.java.lang下 2)同包下的类 2.创建对象 : new关键字具有创建对象的能力 引用数据类型 变量|引用 = new 引用数据类型(); eg:Class001_Phone phone=new Class001_Phone();
注意: 1.基本数据类型的变量=右边为数据值 2.引用数据类型的变量=右边为对象 3.成员变量只声明不赋值存在默认值 整数0 小数0.0 boolean:false char:空字符 引用数据类型: null
public class Class002_PhoneTest {
public static void main(String[] args) {
//创建手机对象
Class001_Phone phone = new Class001_Phone();
//使用
//赋值
phone.brand="华为";
phone.color="白色";
phone.price=7000;
//调用
System.out.println(phone.brand);
System.out.println(phone.color);
System.out.println(phone.price);
phone.call();
phone.call();
}
}
1.4.5对象的内存分析
new关键字创建对象的步骤:
2.1 构造器
2.1.1构造函数 构造方法
作用: 为对象初始化信息(为对象的成员变量赋值)
使用: 跟随new关键字一起使用,不能单独调用。
注意:
方法名称与当前类名一致;
如果一个类中没有显示的定义构造器,编译器会自动默认提供一个空构造(没有参数的构造器)
如果存在显示定义的构造器,编译器不会再为类型提供任何构造器了,包括空构造
构造器中可以存在return,根据需求定义,实现提前结束构造器,但是不能带出返回值
public Dog(String dogName,int dogAge,String dogType){
System.out.println("这是带参造......");
if(dogAge<0){
System.out.println("年龄不合法无法初始化...");
return;
}
package com.yjxxt.constructor02;
/*
构造器|构造函数|构造方法
特殊的方法
作用: 为对象初始化信息(为对象的成员变量赋值)
使用: 跟随new关键字一起使用,不能单独调用
定义:
修饰符 类名(参数列表){
}
注意:
构造器不能定义void|返回值
构造器也是特殊的方法,具有方法重载的特性->构造器的重载
构造器帮助实现,在通过new关键字创建对象的同时为对象初始化信息
以后定义模板类,至少提供一个空构造,按需提供带参构造
*/
public class Class001_Constructor {
public static void main(String[] args) {
//先创建对象,后赋值
//1.创建对象
//Dog dog = new Dog();
//2.赋值
//dog.name = "花卷";
//dog.age = 4;
//dog.type = "二哈";
//创建对象的同时为成员变量赋值
Dog dog = new Dog("大白",-2,"萨摩");
dog.lookDoor();
//为对象的成员重新赋值
dog.name = "小白";
dog.lookDoor();
}
}
class Dog{
public String name;
public int age;
public String type;
//空构造
/*public Dog(){
System.out.println("这是空构造......");
}
public Dog(String dogName){
name = dogName;
}*/
public Dog(String dogName,int dogAge,String dogType){
System.out.println("这是带参造......");
if(dogAge<0){
System.out.println("年龄不合法无法初始化...");
return;
}
name = dogName;
age = dogAge;
type = dogType;
}
public void lookDoor(){
System.out.println(name+"正在看家...");
}
}
2.2this使用
public Person(String name){//李四
name=pname;
}
将通过带参构造器创建对象时传入的李四作为参数,将其赋值给p2对象的成员变量name。
2.1.1this.的使用
this.
代表当前对象的
this.不可省略,局部变量与成员变量同名的情况下,此时需要通过this.来代表对象的属性(对象的成员变量)
public String name;
public Person(String name){//李四
this.name=name;//局部对象name,赋值给p2对象的成员变量name;
}
this可以省略,
/*内在的功能*/
public void eat(){
System.out.println(this.name+"在吃饭");
}