面向对想
面向对象和面向过程的区别
- 都是一种思想,思维方式
- 面向过程:"我应该如何完成?"然后一步一步的去实现就可以了
- 面向对象:"这件事我不想做,我应该找谁来完成?"关注的就是对象,而不是关注实现过程
- 面向对象依托于面向过程,二者相辅相成,都是一种解决问题的思路
面向对象的优点
- 可以将复杂的问题简单化
- 面向对象更贴合于管理者,面向过程更贴合于执行者
- 面向对象的思维方式更符合现实生活中人们的思维方式
假如要造一辆汽车,面向过程就是一步一步的去解决问题,先去买橡胶,画图纸,造模具…等等.然而造汽车用面向对象思维来想就是,我先找一批人过来, 1个人去买橡胶,3人一起造轮胎,10人一起造模具, 20个人装配汽车等等,分工明确,每个人做每个人的事,分工明确,把造汽车这个复杂的问题简单化,更符合现实生活中人们的思维方式
java中为我们提供了2个角色: 类 对象 实现程序的开发
类: 表示一些对象的共性 | 特点 | 特征–>共性
对象: 表示现实生活中的具体事务
根据类创建对象,通过类和对象将程序与生活建立联系
如何自定义类:
修饰符 类名{
//成员变量
修饰符 数据类型 变量名 = 赋值;
//成员方法:不被static修饰的方法就叫做成员方法
修饰符 返回值类型|void 方法名(参数列表){
功能体;
}
}
public class Phone01 {
//属性:成员变量
public/*修饰符*/ String/*数据类型*/ color;
//品牌
public String brand;
//价钱
public double price;
//功能:成员方法
public /*修饰符*/void/*返回值类型,无返回值*/call(){
System.out.println("从前有一个人长得像电话,出门就被打了...");//功能体
}
}
类的测试
1.导包:
同包下的类不需要导包
在java.lang包下的直接子内容不需要导包
2.创建这个类型的引用|变量:–>创建对象
引用数据类型 引用 = new 引用数据类型();
new关键字就是创建对象
3.根据对象名字|引用名使用某个对象的功能
引用.功能名字();
引用.属性名字
class Phone{
//成员属性
//手机颜色
public String color;
//手机品牌
public String brand;
//手机价格
public String price;
//人
public String name;
//功能
public void charge(){
System.out.println(name+"给"+brand+color+"手机充电");
}
}
public class Phone01 {
public static void main(String[] args){
Phone phone = new Phone();//引用数据类型 引用 = new 引用数据类型();
//new关键就是创建对象
phone.name="小唐";//引用.属性名字
phone.brand="华为";//引用.属性名字
phone.color="翡冷翠";//引用.属性名字
phone.charge();//引用.功能名字();
}
}
自定义的引用数据类型可以作为方法的返回值类型,返回一个对应类型的对象
下面的代码中return后面的cake返回了一个cake类型的对象
然后引用功能,让他实现,现实生活中,我们做蛋糕做好了,也需要拿回去,所以必须要返回值.
public class Cake {
//成员属性
//口味
public String taste;
//形状
public String shape;
//尺寸
public int size;
//价钱
public double money;
//制作细节
public String details;
//成员方法
//展示细节
public void info(){
System.out.println(taste+"-->"+shape+"-->"+size+"-->"+money+"-->"+details);
}
}
public class Caker {
//名字
public String name;
//性别
public boolean gender; //true->男 false->女
//级别
public String level;
//自定义的引用数据类型可以作为方法的返回值类型,返回一个对应类型的对象
//做蛋糕 : 动物奶油
//返回值:要蛋糕 Cake 参数:要 口味 尺寸 价钱
public Cake make(String taste,int size,double price){
//制作蛋糕->创建一个蛋糕对象
Cake cake=new Cake();//引用数据类型 引用 = new 引用数据类型();
cake.taste=taste;//引用.属性名字
cake.shape="java";//引用.属性名字
cake.size=size;//引用.属性名字
cake.money=price;//引用.属性名字
cake.details="100个鸡蛋";//引用.属性名字
return cake;//返回值返回一个蛋糕类型的对象
}
}
构造器
- new关键字就是创建对象
- 在堆中为对象开辟空间,成员属性跟随对象进入到堆中,并赋默认值
- 调用这个类的构造器为对象初始化信息(第一次赋值就叫做初始化,及成员属性)
- 将地址返回给引用
构造器: 构造方法
构造函数(java中不这么叫,没有函数这一说,都称之为方法)
构造器就是一个特殊的方法
- 构造器的作用:就是为对象初始化信息,不是用来创建对象的
- 构造器的使用: 跟随new 使用
- 构造器的定义
修饰符 类名(参数列表){
构造器...
}
没有返回值类型,没有void,可以添加return
方法名必须与类名一致,否则编译器报错.
不能和static,final,abstract一起使用
注意事项
- 如果没有自定义的为类定义任何构造器,编译器会为你的类默认提供一个空构造(没有参数的构造器)
- 如果有显示定义任何构造器,编译器就不会再为你提供任意构造器了
- 构造器是一个方法,是方法就可以重载
构造器的优点
- 构造器可以帮助我们简化代码,在通过对象.属性之前,就可以提前为对象属性赋值
- 构造器就是特殊的方法,特殊的创建方式,特殊的使用方式,特殊的作用,但是也是方法,所以有方法重载的特性
如何在创建对象的时候指定匹配不同的构造器?
new 类型()-->匹配不同的参数列表
public static void main(String[] args) {
//先创建对象
Dog dog=new Dog(); //()->构造器的参数列表
//手动赋值
dog.color="黄色";
dog.type="中华田园犬";
//创建对象并且赋值
Dog dog2=new Dog("棕色","金毛");
dog.dog();
dog2.dog();
}
}
class Dog{
public String color;
public String type;
//构造器 空构造
public Dog(){
System.out.println("我是空构造");
}
public Dog(String dogColor){
System.out.println("我是带1个参数的构造器");
color=dogColor;
}
//带参构造 2个参数
public Dog(String dogColor,String dogType){
color=dogColor;
type=dogType;
System.out.println("我是带2个参数的构造器");
}
//展示细节
public void dog(){
System.out.println(color+"---->"+type);
}
}
说明:
- 构造方法不能被显式调用。
- 构造方法不能有返回值,因为没有变量来接收返回值