Java 基础类之四
方法的重载
在同一个类中,允许存在一个以上的同名方法,只有它们参数个数不同或者参数类型即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | package com.chenxiTeat.com.chenxiTeat; /* 方法重载(overload) 在同一个类中,允许存在一个以上的同名方法,只要他们参数或者参数类型不同即可。 “两同一不同”;同一个类、相同方法名参数列表不同 举例 Arrays类中重载sort()/binrySearch() 判断是否属于重载: 跟方法的权限修饰、返回类型、形参变量名、方法体都没有关系! 通过对象调方法时,如何确定哪个指定的方法 方法名----->参数列表 当调用可变个数形参的方法时,传入的参数个数可以时0个1个2给 可变个数形参的方法与本类中方法名相同,形参个数不同的方法构成重载 2.4可变个数形参的方法与本类中方法名字形态,形参类型也相同的数组不构成重载 */ public class OverLoadTest { public static void main(String[] args){ OverLoadTest test = new OverLoadTest(); test.getSum( 1 , 2 ); OverLoadTest test1 = new OverLoadTest(); test1.moL( "hhhhdfdgxfcgh" ); } //如下4个方法构成了重载 // public void getSum(int i,int j){ // System.out.println(i+j); // } public void getSum( double d1, double d2){ System.out.println( "2" ); } public void getSum( int i,String s){ System.out.println( "3" ); } public void moL( int i){ System.out.println(i*i); } public void moL( int i, int j){ System.out.println(i*j); } public void moL( double s){ System.out.println(s); } public int max( int i, int j){ return (i>j)? i:j; //如果i大于j;则返回i,否则返回j } public double max( double d1, double d2, double d3){ double max = (d1>d2)?d1:d2; return (max>d3)? max:d3; } //可变类型的形参 //具体使用 //可变类型的格式:数据类型...变量名 // 当调用可变个数形参的方法时,传入的参数个数可以时0个1个2给 // 可变个数形参的方法与本类中方法名相同,形参个数不同的方法构成重载 //2.4可变个数形参的方法与本类中方法名字形态,形参类型也相同的数组不构成重载 public void moL(String ... strs){ System.out.println( "show(String ... strs)" ); } public void moL ( int i,String ...strs){ } } |
封装和隐藏性
创建一个类的对象后,可以通过对象.属性的方法,对对象属性进行进行赋值,赋值操作要收到属性的数据类型和存储范围的制约,除此之外没有其他的制约条件,但是在实际问题中,往往需要给属性赋值时加额外条件,这条件就不能在属性声明时体现,只能通过方法限制添加,同时需要避免用户使“对象.属性”的方法对属性赋值,则需要将属性设置为私有的(private)权限修饰符。私有权限修饰符(private)--->此时,属性就体现为封装性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | package com.chenxi.java; public class Anma { public static void main(String[] args){ Animal a= new Animal(); a.name= "格林" ; //a.age=8; a.legs= 4 ; a.setLegs( 6 ); a.show(); } } class Animal{ String name; private int age; //声明私有属性 int legs; public void eat(){ System.out.println( "进食" ); } public void show(){ System.out.println(name+age+legs); } public void setLegs( int i){ if (i>= 0 && i% 2 == 0 ){ age = i; } else { age = 0 ; } } } |
封装性的体现:属性的私有化,方法的私有化,单模式
封装性的体现,需要权限修饰符来配合
Java权限修饰符(从小到大):private、缺省、protected 、public
四种权限可以用来修饰类的内部结构:属性、方法、构造器、内部类
修饰类只能用:public和缺省
Java权限修饰符public、protected、(缺省)、private置于类的成员定义前, 用来限定对象对该类成员的访问权限。
修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
private | yes | |||
(缺省) | yes | yes | ||
protected | yes | yes | yes | |
public | yes | yes | yes | yes |
对于class的权限修饰只可以用public和default(缺省)。
public类可以在任意地方被访问。
default类只可以被同一个包内部的类访问。、
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package com.chenxi.java; public class Order { private int orderPrivate; int orderDefault; public int orderPublic; public void methodPublic(){ orderPrivate= 1 ; orderDefault= 2 ; orderPublic= 3 ; } void methodDefault(){ orderPrivate= 1 ; orderDefault= 2 ; orderPublic= 3 ; } private void methodPrivate(){ } protected void methodProtected(){ orderPrivate= 1 ; orderDefault= 2 ; orderPublic= 3 ; } } |
同一个包内测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package com.chenxi.java; public class OrderTest { public static void main(String[] args){ Order test1= new Order(); test1.orderPublic= 10 ; test1.orderDefault= 6 ; //'orderPrivate' has private access in 'com.chenxi.java.Order' test1.orderPrivate= 10 ; //出了order类,私有结构声明的不可再用了 test1.methodProtected(); System.out.println(test1.orderDefault); } } |
不同包内测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package com.chenxi1.com; import com.chenxi.java.Order; public class test01 { public static void main(String[] args){ Order test1= new Order(); test1.orderPublic= 10 ; //orderDefault' is not public in 'com.chenxi.java.Order'. Cannot be accessed from outside package test1.orderDefault= 6 ; //出了order类所属的包后,私有结构缺省声明的不可再用了 //'orderPrivate' has private access in 'com.chenxi.java.Order test1.orderPrivate= 10 ; //出了order类所属的包后,私有结构缺省声明的不可再用了 System.out.println(test1.orderDefault); } } |
.创建程序,在其中定义两个类:Person和PersonTest类。定义如下: 用setAge()设置人的合法年龄(0~130),用getAge()返回人的年龄。 在PersonTest类中实例化Person类的对象b, 调用setAge()和 getAge()方法,体会Java的封装性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package com.chenxi.exer; /* 类的创建 .创建程序,在其中定义两个类:Person和PersonTest类。定义如下: 用setAge()设置人的合法年龄(0~130),用getAge()返回人的年龄。 在PersonTest类中实例化Person类的对象b, 调用setAge()和 getAge()方法,体会Java的封装性。 */ public class Person { private int age; public void setAge( int a){ if (a< 0 ||a> 130 ){ throw new RuntimeException( "输入错误" ); } else { age=a; } } public int getAge(){ return age; } } |
类的实例化
1 2 3 4 5 6 7 8 9 | package com.chenxi.exer; public class PersonTest { public static void main(String[] args){ Person personi= new Person(); personi.setAge( 8 ); System.out.println(personi.getAge()); } } |
测试
1 | 8 |
草都可以从石头缝隙中长出来更可况你呢
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
2020-03-11 redis 集合操作