【JAVA面向对象编程机制——封装性】 一、类与对象(类的定义、对象的建立和使用、形参和实参的传递方式、方法重载)

封装性

Java的封装性就是把对象的属性和对属性的操做结合成一个独立的单位,并尽量的隐藏内部的细节。 它包含两个含义:javascript

1)把对象的所有属性和对属性的操做结合在起,造成一个不可分割的独立单位(即对象)。
Java是一种纯粹的面向对象程序设计语言,除了基本数据类型(如整型、浮点型等),Javn中的数据都以对象的形式存在,将属性和操做封装在对象中,它没有游离于类以外的属性和方法,能够有效实现细节隐藏。java

2)信息隐蔽,即尽量隐蔽对象的内部细节,对外造成一个边界,只保留有限的对外公开接口使之与外部发生联系,这一点经过Java包Java类及其成员的访问权限实现。 能够理解为黑盒子,平常用品之类的商业用品。只给你能够应用的部分。web

1类与对象

类是Java面向对象程序设计中最基本的程序单元。 编写Java程序时,首先建立类,而后经过类建立不一样的对象。 当程序运行时,对象有对应的内存空间存储其具体的属性值,经过对象激活相应的方法(方法访问内存),实现必定的功能。svg

1.1类的定义

Java文件中中能有一个同名类,且只有它能被public修饰函数

java中经过class关键字进行定义:类声明和类体spa

  1. )类声明:建立一个新的对象类型
public class muchu{  //关键字class前能够有访问权限public也能够没有
      //类体
              }
  1. )类体:定义一个类,就能够在类体中定义;两个类造成员:属性和方法

一、属性的定义
属性的定义分为两种:
基本数据类型
对象类型:经过class关键字定义的对象类型
.net

c语言基本数据类型 /位 Java基本数据类型 /位
char 1 char16
short 2 $short16
int 4 int32
long 4 long64
longlong 8
float 4 float8
double 8 double64
longdouble 8
boolean1
byte8
public class Muchu{
		private float x;
		private float y;
}
public class Shankong{
		private Muchu mu1;
		private Muchu mu2;
}

·类Muchu两个访问权限为“private”属性,x,y的基本数据类型为float(基本数据类型)。
·类Shankong的两个访问权限位private属性,其为对象类型。其中private表示的属性是私有的,只有该类的内部能够访问。设计

二、方法的定义指针

方法的定义格式包括方法的访问权限、方法名字、方法的参数列表、返回类型和方法体。
·参数类型和方法的返回类型对象类型基本数据类型code

三、构造方法的定义
实质就是 初始化参数
1.)它具备与类名相同的名称
2.)它没有返回值(若是有,则不是构造方法,而是和构造方法同名的成员方法)

3).构造方法的调用时机与通常的方法不一样。通常的方法是在须要时才调用,而构造方法则是建立对象时自动调用,并执行构造方法的内容。所以,构造方法无需在程序中直接调用,而是在对象产生时自动执行。
4).基于上述构造方法的特性,可利用它来对对象的数据成员作初始化的赋值;

5).在类中没有声明任何的构造方法,系统会自动为类加入一个无参的且什么都不作的构造方法,相似于下面的代码:
public Person(){}

6).一但用户自定义了构造方法则系统再也不提供无参构造方法。用户手动添加一个(是否是必定要添加?)

7).构造方法虽然能够被私有了,但并不必定说此类不能产生实例化对象,只是产生这个实例化对象的位置有所变化,即只能在本类中产生实例化对象。

例子:Java编译器为其提供的缺省构造方法

public Muchu(){
}
数据类型 缺省值
基本数据类型 0
boolean false
char \0
对象类型变量 null

函数构造方法的定义部分转载于:https://blog.csdn.net/ClinEvol/article/details/82870454

1.2对象的建立和使用

一、对象的声明
Java中的对象相似于c语言的指针,对象变量声明后,系统将分配32位地址空间(4个字节),而且空间为null。

例子:声明类Muchu 的对象变量mu
Muchu mu;

二、对象的建立

new一个对象,只有在对象变量声明后,经过new关键字调用类的的构造函数建立对象,而后后才可使用对象变量。

Muchu mu = new Muchu(x,y);

每次new一个对象都会建立一个类的新的对象,而且分配内存空间。
对象变量的存储地址不可修改,仅仅能够经过访问他的指向的对象的地址。

三、对象的使用
若是要访问对象里的某个成员变量或方法,能够经过下面的语法来实现:

对象名称.属性名     //访问属性
对象名称.方法名()     //访问方法

例如,想访问Person类中的name和age属性,可用以下方法来访问:

p1.name;   //访问Person类中的name属性
p1.age;    //访问Person类中的age属性

所以若想将Person类的对象p中的属性name赋值为“张三”,年龄赋值为25,则可采用下面的写法:

p1.name = "张三" ;
p1.age = 25 ;

若是想调用Person中的talk()方法,能够采用下面的写法:

p1.talk();   //调用Person类中的talk()方

1.3方法的形式参数和实际参数的传递方式

Java形参和实参的结合方式为值传递。 与形参的数据类型无关。

假设 经过Muchu muchu1 = new Muchu(100,200);建立了一个对象m1,定义两个方法changeOne()和changeTwo(),并将muchu1做为实参传递给两个方法。

public static void changeOne (Muchu m1){
	m1 = new Muchu(78,156);
}
public static void changeTwo(Muchu m1){
	m1.setX(15);
}

m1做为形参,因为是值传递,实际参数muchu1会把其存储的地址拷贝到形参m1中,此时形参和实参是不一样内存同一地址。

方法changeOne()的调用不会影响实参的和实参指向的对象。(只修改了形参的值,没修改指向的对象的值)
方法changeTwo()的调用不会影响实参,单会影响实参指向的对象。(方法修改了形参指向的对象的属性值)

1.4方法重载

在Java中,同一个类中的多个方法能够有相同的方法名称,可是有不一样的参数列表,这就称为方法重载(method overloading)。

参数列表又叫参数签名,包括参数的类型、参数的个数、参数的顺序(有顺序),只要有一个不一样就叫作参数列表不一样。

重载是面向对象的一个基本特性。

public class Demo {
 
	//一个普通得方法,不带参数,无返回值
	public void add(){
		//method body
	}
	
	//重载上面的方法,而且带了一个整形参数,无返回值
	public void add(int a){
		//method body
	}
	
        //重载上面的方法,而且带了两个整型参数,返回值为int型
	public int add(int a,int b){
		//method body
		return 0;
	}
 
}

经过上面的例子,不难看出,重载就是在一个类中,有相同的函数名称,但形参不一样的函。重载的结果,可让一个程序段尽可能减小代码和方法的种类。

说明:

·参数列表不一样包括:个数不一样、顺序不一样、类型不一样。
·仅仅参数变量名称不一样是不能够的。
·跟成员方法同样,构造方法也能够重载。
·声明为final的方法不能被重载。
·声明为static的方法不能被重载,可是可以被在此声明。

方法的重载的规则:

方法名称必须相同。
参数列表必须不一样。
方法的返回类型能够相同也能够不相同。
仅仅返回类型不一样不足以称为方法的重载。
方法重载的实现:
方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,若是匹配失败,则编译器报错,这叫作重载分辨

方法重载转于:https://blog.csdn.net/xkfanhua/article/details/80561673