Java 基础类之四
方法的重载
在同一个类中,允许存在一个以上的同名方法,只有它们参数个数不同或者参数类型即可
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)--->此时,属性就体现为封装性
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类只可以被同一个包内部的类访问。、
示例
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;
}
}
同一个包内测试
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);
}
}
不同包内测试
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的封装性。
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;
}
}
类的实例化
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());
}
}
测试
8
草都可以从石头缝隙中长出来更可况你呢

浙公网安备 33010602011771号