前言:
在java语言中经常被提到的两个词是类和对象。它是面向对象的基本。实际上,类可以看做是对象的载体,也就是说类是对象所具有的属性,也可以说类是定义对象的基本规范。
1、面向对象概述
由来:早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2 = 4,通过设计一个算法就可以解决当时的问题。但是随着软件规模越来越庞大,处理过程越来越复杂,这种面向过程的结构化语言的弊端也就逐渐暴露出来,开发周期也越来越长,产品质量不尽人意。这时人们开始引入另一种开发思想--面向对象。
一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木一样快速开发出一个全新的系统。面向对象是指一种程序设计范型,同时也是一种程序开发的方法。对象是类的具体化实现。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
2、类和对象
1、对象
现实世界中,任意一个物品都可以看做是一个对象。例如,我们写代码常用的电脑,我们日常联系使用的手机,都是一个对象。对象是事物存在的实体,因为是实体,那么它一定会具有一些物理或者化学属性,就拿 一个人来举例,一个人所具有的可能的属性有:五官,身高,体重,血型等等。只有这些属性并不能成为一个完整的人,因为还具有许多行为属性,例如唱、跳、rap、打篮球等等,根据对象的实体化,我们将其属性划分为静态部分和动态部分。
举例:
注意看这个篮球巨星,仔细分析可以知道
静态属性有 》 角色:偶像练习生 ,
发型:中分,
穿着:背带裤
.........
动态属性有 》 胯下运球,铁山靠 ........ 等一些专业动作指导。
而在计算机世界中,我们可以根据对象在现实世界中所具有的属性将其抽象出来,在识别这个对象的属性后,这个对象就被定义完成了,然后可以根据这个对象的属性来制定具体的解决问题的方案,这就是对象。
2、类
在我们现实生活中有很多事物,就比如手机,有很多品牌,比如华为,小米,等等。虽然是不同品牌,但是他们都离不开手机这一类事物,他们都具有像处理器,屏幕,内存,摄像头等静态属性,也具有打游戏,拍照,聊天等动态属性。所以我们就将这具有相同特征的一类事物称为类
在java语言中,类中对象的动态属性是以方法的形式定义的,对象的静态属性是以成员变量的形式定义的,所以类包括对象的静态和动态属性。
3、类的定义格式
// 创建类 //class ClassName{ // field; 字段(属性) 或者 成员变量 // method; 行为 或者 成员方法 //} // 例如定义手机类 class Phone{ String SizeOfPhone; String CpuModel; int DateOfManufacture; //.......等等静态部分 public void function_TakeAPicture(){ System.out.println("正在拍照"); } // ......等等动态部分 }
根据上面的代码,使用者可以用class来定义一个手机对象(这里为了和对象名进行区分,推荐使用大驼峰的形式来书写类名),Phone为类名,同时在Phone这个类中定义了他的属性,我们可以看到,静态属性是用变量来进行定义的,动态属性是以方法来定义的:
1、成员变量(静态部分)
例如,手机尺寸,我们用字符串来定义:String SizeOfPhone; SizeOfPhone 为变量名,也可以是java中其他合法数据类型:
例如: Boolean类型 等等。我们可以为其设置初始值,String SizeOfPhone = "长 x 宽 x 高 " ;
但也可以不初始化,不初始化就会自动初始化为默认值,Boolean类型的默认值为 false,int float等默认值为其对应的0值,int为0,float为0.0等,String类型默认为 null,等。
2、成员方法(动态部分)
在java语言中,使用成员方法对应于类的对象的行为,就像上述手机这个类中的华为手机拍照这个行为一样,其定义成员方法的格式如下:
权限修饰符 返回值类型 方法名 ( 参数列表) {
......... //方法体
return 返回值 ; // 无返回值则返回类型为 void
}
一个成员方法,可以有参数,这个参数可以是一个对象,也可以的是其他合法的变量,返回值可有可无,如果需要返回值,则在需要的地方使用return 关键字,使用到这个关键字的时候,方法的执行将被终止。
注:如果一个类的方法中如果有与成员变量 同名的局部变量,则方法的执行以局部变量来进行
3、实例化
了解什么是类,什么是对象后,就该了解一下什么是实例化。
我们使用上面的方法创建一个类之后,就有了我们所定义的类的属性,然后使用这个类去创建一个对象,这个过程就称为实例化,例如,我们定义了一个手机类,那么我们就可以使用这个手机类创建一个名为华为手机的具体对象。
在java中 采用 new 关键字来实例化生成对象。
我们这里拿一个狗类来举例 :
new关键字的使用部分: PetDog dog1 = new PetDog();
PetDog dog2 = new PetDog();
这里就实例化了两个PetDog的对象:dog1和dog2 。(可以通过英文字符中的点好' . '来访问对象的中的成员)
3、权限修饰符
在初学java的时候,不免会看到public,private等修饰符,那么这些关键字都有些什么作用呢,经过学习我们可以了解到,这些都是java中的权限修饰符,主要包括private, public, protected,这些修饰符控制对类和类的成员的访问。
1、private
如果一个类的成员被private修饰,则该成员只能在其所在的类中访问:
class Dog{ private String name; int age; public void bark(){ System.out.print(name + "is barking!"); } }
这里我们在main函数里面试试访问他:结果是显示在编译的时候出现了问题
java: name 在 Dog 中使 private 访问控制 private修饰一个类成员变量无法直接同一个包的不同类中访问
在其后面要讲到的继承的子类中也是不可用的(这个被private修饰的父类成员,可以被继承但是无法访问):
class Dog{ private String name; int age; public void bark(){ System.out.print(name + "is barking!"); } } class specialDog extends Dog{ public void func(){ System.out.println("the sepcial dog"); } } public class Test { public static void main(String[] args) { specialDog dog1 =new specialDog(); dog1.name = "修勾"; } }
我们定一个Dog父类,然后使用specialDog来继承这个Dog父类,然后创建一个specialDog的对象并对父类中的name进行访问:结果同样如下。
无法访问所继承的父类中的private修饰的成员
除此之外,被private修饰的成员对其他包的类也是不可见的:编译出错。
父类和子类在不同的两个包
设置private可以避免用户直接访问它,从而保证数据的安全性,如果非要在外部调用这个类中被private修饰的成员,可以在这个类中开放一个指向这个private修饰的成员的接口方法,
2、public
类中被public修饰的成员,除了可以在本类访问这个成员,在其他类和子类,或者其他包中访问。
此处的案例在private中可以类比,不再一一列举。
3、protected
从上面的内容可以得知,类中private修饰的成员不能夸包访问,而public又可以给到最大权限,可以夸包访问,在不同的类中也可以使用,两种修饰符都太极端,于是就给出了一个中间值,他就是protected,类中被protected修饰的变量可以在同一包中的同一类访问,也可以在同一包中的不同类访问,同时还可以在不同包中的子类访问。
4、default
如果不加修饰符,则默认给出defualt修饰符,defualt修饰符默认只能同一包中的同一类和同一包中的不同类访问。即只有同一个包中的类可以调用这个类的成员。
java类和对象的基础特性-2