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

封装性

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

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

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

1类与对象

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

1.1类的定义

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

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

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

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

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表示的属性是私有的,只有该类的内部可以访问。

2、方法的定义

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

3、构造方法的定义
实质就是 初始化参数
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对象的创建和使用

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

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

2、对象的创建

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

Muchu mu = new Muchu(x,y);

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

3、对象的使用
如果要访问对象里的某个成员变量或方法,可以通过下面的语法来实现:

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

例如,想访问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

你可能感兴趣的:(Java面向对象编程机制)