活动地址: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()); } }
提醒:在发布作品前请把不用的内容删掉(活动地址请保留)