面向对象(二)

发布于:2022-08-02 ⋅ 阅读:(379) ⋅ 点赞:(0)

活动地址:CSDN21天学习挑战赛

目录

方法的重载

可变个数的形参

递归方法的使用

封装性


面向对象的特征一:封装与耦合

方法的重载


1,定义

在同一个类中,允许存在一个以上的同名方法,只要它们参数个数或者参数类型不同即可

"两同一不同"

同一个类、相同方法名

参数列表不同

通过对象调用方法时,根据"方法名(参数列表)"来确定某一个指定的方法

2,判断是否重载

与方法的权限修饰符、返回值类型、形参变量名、方法体都无关

3,举例

以下方法构成重载

我们可以看出他们在同一个类中使用了相同的方法名,但参数列表不同

public void getSum(int i,int j) {
	System.out.println("1");
}
public void getSum(double d1,double d2) {
	System.out.println("2");
}
//输入顺序也有要求
public void getSum(String s,int i) {
	System.out.println("3");
}
public void getSum(int i,String s) {
	System.out.println("4");
}

**

可变个数的形参


1、jdk 5.0新增性能

2、可变个数形参的格式:数据类型...变量名

例:public void show(String ... strs){ }

3、可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载,

     与形参类型也相同的数组之间不构成重载。

4、可变个数形参在方法的形参中,只能声明在末尾

**

递归方法的使用


1,递归方法

一个方法体内调用它自身

2,说明

1、方法的递归包含了一种隐式循环,他会重复执行某段代码,这种重复无序循环控制

2、递归一定向已知方向递归,否则这种递归就变成无穷递归

3,举例

//例1:计算1-n之间所有自然数的和
public int getSum(int n) {
	if (n == 1) {
	return 1;
}else {
		return n + getSum(n - 1);
	}
		
}
//例2:计算1-n之间所有自然数的乘积
public int getSum1(int n) {
	if (n == 1) {
		return 1;
}else {
		return n * getSum1(n - 1);
	}
}

**

封装性


1,引入

当我们创建一个类的对象以后,我们可以通过“对象.属性”的方式给对象的属性进行赋值

而赋值时要受到属性数据类型和存储范围的制约,因此需要加入额外的限制条件,这个限制条件不能在属性声明时体现,只能通过方法进行限制条件的添加

同时避免用户使用“对象.属性”的方式对属性进行赋值,则需要将属性声明为私有的(private)

此时,对于属性就是封装性的

2,封装性的体现

1、我们将类的属性私有化(private),同时提供公共的(public)方法来获取(getXXX)和设置(setXXX)此属性的值

2、不对外暴露私有的方法

3、单例模式

3,封装性需要权限修饰符配合

1、Java规定的4种权限(从小到大排列):private、缺省、protected、public

2、权限修饰符可以用来修饰以及类的内部结构:属性、方法、构造器、内部类

3、4种权限都可以用来修饰内部结构

     修饰类的话,只能使用:缺省、public

4,举例

public class Person {
	private int age;
	
	public void setAge(int a) {
		
	if (a < 0 ||a > 130) {
		System.out.println("输入数据非法");
		return;
	}
	age = a;
	}
	public int getAge() {
		return age;
	}
}


public class PersonTest {
	public static void main(String[] args) {
		Person p1 = new Person();
//		p1.age = 1;此时 "对象.属性" 无法使用 编译不通过
		
		p1.setAge(12);
		System.out.println("年龄为:"+ p1.getAge());
	}
}

提醒:在发布作品前请把不用的内容删掉(活动地址请保留)