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

  

草都可以从石头缝隙中长出来更可况你呢
原文地址:https://www.cnblogs.com/rdchenxi/p/14195119.html