目录
先复习一下: * 封装就是面向编程的核心思想,将对象的属性和行为封装起来,其载体就是类。
import java.util Arrays;
/*
面向过程:当需要实现一个功能的时候,每一个具体步骤都要亲历亲为,详细处理每一细节齾。
面向对象:当需要实现一个功能的时候,不关心具体步骤,而是找一个已经具有该功能的人,来帮我做事。
*/
public class Demo09PrintArray {
public static void main(String[] args) {
int[] array = {10,20,30,40,50,60};
//要求打印格式为:[10,20,30,40,50]
//使用面向对象,每一个过程都要亲历亲为。
System.out.print("[");
for (int i = 0; i < array.length;i++);
if (i == array.length - 1) { //如果是最后一个元素
System.out.println(array[i] +"]");
}
}
System.out.println("==============================");
//使用面向对象
//找一个JDK给我们提供好的Arrays类
//其中有一个toString方法,直接就能把数组变成想要的格式的字符串
System.out.println(Arrays.toString(array)); (加上60也不影响结果)
}
}
面向过程和面向对象的区别在于:它区别于面向过程思想,强调的是通过阅读调用对象的行为来实现功能,而不是自己一步一步的去操作实现。
举栗子(简称人类偷懒行为):
洗衣服:
* 面向过程:把衣服脱下来->找一个盆->放点洗衣粉->加点水->浸泡10分钟->揉一揉->清洗衣服->拧干->晾起来
*面向对象:把衣服脱下来->打开全自动洗衣机->扔衣服->按钮->晾起来
区别: 面向对象:强调步骤。 面向对象:强调对象,这里的对象是洗衣机。
特点:面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。面向对象的语言中,包含了三大基本特征,即封装,继承和多态。
类和对象 :环顾四周,你会发现很多对象,比如桌子,椅子,同学,老师等。桌椅属于办公用品,师生都是人类。
*类:是一组相关属性和行为的集合,可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
现实中,描述一类事物:
* 属性:就是该事物的状态信息。 * 行为:就是该事物能做什么。
举栗:小猫。 属性:名字,体重,年龄,颜色。
行为:走,跑,跳,叫。
类和对象的关系:
7.1 类的封装
通过解读栗子来理解封装,eg:我们到一个餐馆去吃饭,点了一盘鱼香肉丝,感觉好吃,我想知道厨师的名字,希望厨师多帮我做点儿事。
如果这个场景用Java代码毫无封装的实现,就是这样的:
public class Restaurant1 {
public static viod main(String[] args) {
String cookName="Tom Cruise"; //厨师的名字叫Tom Cruise
System.out.println("**请厨师为我做一份香辣肉丝。***");
System.out.println(cookName + "加葱花");
System.out.println(cookName + "洗蔬菜");
System.out.println(cookName + "开始烹饪" + "香辣肉丝");
System.out.println( "请问厨师叫什么名字?***");
System.out.println(cookName)
System.out.println( "**请厨师给我切一点葱花。***");
System.out.println(cookName + "切葱花");
此例子里面,所有逻辑代码全是在main方法中实现的,代码完全暴露,我们可以任意删改。如果可以任意删改,餐馆便无法正常运行,比如:我们知道餐馆的任何信息 ;我让厨师切葱花,出厨师却搅拌鸡蛋;我让厨师做一份清蒸鱼,厨师却让我唱首歌.........
System.out.println("**请让厨师给我切一点葱花。***");
System.out.println("cookName + "搅鸡蛋");
System.out.println("**请让厨师为我做一份清蒸鱼。***");
System.out.println("cookName + "你是我的小呀小苹果***");
如何防止其他人修改厨师的行为呢?就是将厨师打包成类。
将厨师封装成Cook类,是想餐馆点菜的场景。
将厨师单独封装成一个类,将厨师定义成厨师类的行为,当我们想让厨师做菜,只能通过调用对象成员方法实现,而我们却不知道这个方法到底怎么写,所以无法随意修改。餐馆没有义务告诉我们厨师的任何信息,并且厨师也不会随意受我们差遣,所以说厨师的有些属性和行为不予以公开。
我们将厨师的属性和部分方法用private来修饰。re
此时再运行餐馆的主方法,就会抛出异常,提示Cook2的name和cutOnion()不可以直接调用。
日常生活中,顾客根本没有接触厨师的机会,所以厨师这个角色是对顾客来说是隐蔽的,被封装在餐馆的类当中。
将厨师对象封装在餐馆类中,顾客无法接触厨师的任何信息。
public class Restaurant {
private Cook2 cook = new Cook2 (); //餐厅封装的厨师类
public static void takeOrder (String dish) { //下单
cook.cooking(dish); //通知厨师做菜
System.out.println("您的菜好了,请慢用。");
}
public String saySorry() {//拒绝客户要求
return "抱歉,餐厅不提供此项服务。";
}
public static void main(String[] args) {
Restaurant waiter = new Restaurant();//创建餐厅对象,为顾客提供服务
System.out.println("**请厨师为我做一份鱼香肉丝。***");
waiter.takeOrder("鱼香肉丝");//服务员给顾客下单
System.out.println("**你们厨师叫什么名字?***");
System.out.println(waiter.saySorry());//服务员给顾客善意的答复
System.out.println("**请厨师给我切一点葱花。***");
System.out.println(waiter.saySorry());//服务员给顾客善意的答复
}
}
此例可得,作为顾客是始终和厨师没有交集的,只能是由服务员来传达,作为顾客不知道美食由那位厨师又或是字母烹饪出来的,这种编程模式就是封装。
封装的思想:将对象的属性和行为封装起来的载体就是类。类通常对客户隐藏其实现细节。
7.2 类的继承
继承在面向对象开发思想中是一个非常重要的概念,它使整个程序架构具有一定的弹性,在程序中复用已经定义完善的类不仅可以减少软件开发周期,还可以提高软件的可维护性和可拓展性。
举两个栗子:1 、平行四边形是特殊的四边形,可以说平行四边形继承了四边形类,这时平行四边形类将所有四边形具有的属性和方法都保留下来,并基于四边形类扩展了一些新的平行四边形类特有的属性和方法。
2、
eg:
Person类:
class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name ;
}
public void setAge(int age) {
this.age = age;
}
public String getname() {
return this .name;
pu