欧美三级电影完整|亚洲一二三四久久|性爱视频精品一区二区免费在线观看|国产精品啪啪视频|婷婷六月综合操人妻视频网站|99爱免费视频在线观看|美女一级片在线观看|北京熟女88av|免费看黄色A级电影|欧美黄色毛片儿

訪問修飾符和封裝

2023-04-12

1. 訪問修飾符


1.1 基本介紹 278


java 提供四種訪問控制修飾符號,用于控制方法和屬性(成員變量)的訪問權限(范圍):


1) 公開級別:用 public 修飾,對外公開


2) 受保護級別:用 protected 修飾,對子類和同一個包中的類公開


3) 默認級別:沒有修飾符號,向同一個包的類公開.


4) 私有級別:用 private 修飾,只有類本身可以訪問,不對外公開.



1.2 注意事項 279



在A類中定義不同的屬性和方法


package com.stulzl.test41;

public class A
{
    //四個屬性,分別使用不同的訪問修飾符來修飾
    public int n1=100;
    protected int n2=200;
    int n3=300;
    private int n4=400;
    //方法
    public void m1()
    {
        //在同一類中,可以訪問 public protected 默認 private 修飾屬性和方法
        System.out.println("n1="+n1+" n2="+n2+" n3="+n3+" n4="+n4);
    }
    //方法的修飾和屬性一樣
    protected void m2(){}
    void m3(){}
    private void m4(){}
    //在同一類中,可以訪問 public protected 默認 private 修飾屬性和方法
    public void hi()
    {
        m1();
        m2();
        m3();
        m4();
    }
}

在B類中引用A類中的屬性和方法


package com.stulzl.test41;

public class B
{
    public void say()
    {
        A a = new A();
        //在同一個包下,可以訪問 public , protected 和 默認修飾屬性或方法,不能訪問 private 屬性或方法
        System.out.println("n1="+a.n1+"n2="+a.n2+"n3="+a.n3);
        //在同一個包下,可以訪問 public , protected 和 默認修飾屬性或方法,不能訪問 private 屬性或方法
        a.m1();
        a.m2();
        a.m3();

    }
}

在Test41中運行,驗證(同類)(同包)不同屬性的區(qū)別,看看能否輸出


package com.stulzl.test41;

public class Test41
{
    public static void main(String[] args)
    {
        A a = new A();//100 200 300 400//測試同類
        a.m1();
        B b = new B();//100 200 300//測試同胞
        b.say();
    }
}

在不同包引用A類中的屬性和方法


package com.stulzl.pkg;

import com.stulzl.test41.A;

public class Test
{
    public static void main(String[] args)
    {
        A a = new A();
        //在不同包下可以訪問public修飾的屬性或者方法
        //但不能訪問protected,默認,private修飾的屬性或者方法
        System.out.println("n1="+a.n1);//100 //驗證不同包

        //在不同包下可以訪問public修飾的屬性或者方法
        //但不能訪問protected,默認,private修飾的屬性或者方法
        a.m1();
        
    }
}

2. 基本介紹


面向對象編程有三大特征:封裝、繼承和多態(tài)。


3. 封裝(encapsulation) 280



4. 封裝的理解和好處 280



5. 封裝的實現(xiàn)步驟(三步)281



6. 快速入門 282


那么在 java 中如何實現(xiàn)這種類似的控制呢?


請大家看一個小程序不能隨便查看人的年齡,工資等隱私,并對設置的年齡進行合理的驗證。年齡合理就設置,否則給默認 年齡, 必須在 1-120, 年齡, 工資不能直接查看 , name 的長度在 2-6 字符 之間


package com.stulzl.test42;

import java.util.Scanner;

//請大家看一個小程序不能隨便查看人的年齡,工資等隱私,并對設置的年齡進行合理的驗證。
// 年齡合理就設置,否則給默認 年齡, 必須在 1-120,
// 年齡, 工資不能直接查看 ,name 的長度在 2-6 字符 之間
public class Test42
{
    public static void main(String[] args)
    {
        Person person = new Person();
        person.setName("jack");
        person.setAge(30);
        person.setSalary(30000);
        //輸出信息
        System.out.println(person.info());
        System.out.println("salary="+person.getSalary());
    }
}
class Person
{
    public String name;//名字公開
    private int age;//年齡私有
    private int salary;//工資私有

    //自己寫 setXxx 和 getXxx 太慢,我們使用快捷鍵
    //然后根據(jù)要求來完善我們的代碼
    public String getName() {
        return name;
    }
    //name 的長度在 2-6 字符 之間
    public void setName(String name) {
        //假如對數(shù)據(jù)的校驗
        if(name.length()>=2 && name.length()<=6)
        {
            this.name=name;
        }
        else
        {
            System.out.println("名字長度不對,給出默認名");
            this.name = "無名氏";
        }

    }

    public int getAge() {
        return age;
    }
    //年齡, 必須在 1-120
    public void setAge(int age) {
        //設置驗證
        if(age>=1 && age<=120)
        {
            this.age=age;
        }
        else
        {
            System.out.println("你設置的年齡不對必須在 1-120,先給一個默認年齡");
            this.age = 18;//給一個默認年齡
        }
    }

    //工資不能直接查看
    public int getSalary() {
        //增加對當前對當前對象的權限判定
        Scanner scanner = new Scanner(System.in);
        System.out.println("查看工資請輸入密碼");
        String key = scanner.next();
        if(key.equals("123"))
        {
            return salary;
        }
        else
        {
            System.out.println("密碼錯誤");
            return -1;//錯誤返回-1
        }
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    //寫一個方法返回信息
    public String info()
    {
        return "信息為 name="+name+" age="+age;
    }
}

6.2 封裝和構造器結合


補充上題


package com.stulzl.test42;

import java.util.Scanner;
public class Test42
{
    public static void main(String[] args)
    {
        Person person = new Person();
        person.setName("jack");
        person.setAge(30);
        person.setSalary(30000);
        //輸出信息
        System.out.println(person.info());
        System.out.println("salary="+person.getSalary());
        //使用構造器輸出
        System.out.println("=====smith信息=====");
        Person person1 = new Person("smith",80,20000);
        System.out.println(person1.info());
        System.out.println("salary="+person1.getSalary());
    }
}
class Person
{
    public String name;//名字公開
    private int age;//年齡私有
    private int salary;//工資私有

    //無參構造器
    public Person() {//這個無參構造器是輸出jack信息的,因為宅main中jack的person()沒有傳值,而我們又寫了一個
                     // 有參構造器為了輸出smith信息,但是Jack的person()無傳參和smith的person1()有傳參,
                     // 防止jack和smith在輸出信息而是用到構造器時矛盾,所以接一個無參構造器給jack使用
    }

    //三個屬性的構造器
    public Person(String name, int age, int salary) {
//        this.name = name;
//        this.age = age;
//        this.salary = salary;

        //我們可以將set方法寫在構造器中,這樣仍然可以驗證
        setName(name);
        setAge(age);
        setSalary(salary);
    }

    //自己寫 setXxx 和 getXxx 太慢,我們使用快捷鍵
    //然后根據(jù)要求來完善我們的代碼
    public String getName() {
        return name;
    }
    //name 的長度在 2-6 字符 之間
    public void setName(String name) {
        //假如對數(shù)據(jù)的校驗
        if(name.length()>=2 && name.length()<=6)
        {
            this.name=name;
        }
        else
        {
            System.out.println("名字長度不對,給出默認名");
            this.name = "無名氏";
        }

    }

    public int getAge() {
        return age;
    }
    //年齡, 必須在 1-120
    public void setAge(int age) {
        //設置驗證
        if(age>=1 && age<=120)
        {
            this.age=age;
        }
        else
        {
            System.out.println("你設置的年齡不對必須在 1-120,先給一個默認年齡");
            this.age = 18;//給一個默認年齡
        }
    }

    //工資不能直接查看
    public int getSalary() {
        //增加對當前對當前對象的權限判定
        Scanner scanner = new Scanner(System.in);
        System.out.println("查看工資請輸入密碼");
        String key = scanner.next();
        if(key.equals("123"))
        {
            return salary;
        }
        else
        {
            System.out.println("密碼錯誤");
            return -1;//錯誤返回-1
        }
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    //寫一個方法返回信息
    public String info()
    {
        return "信息為 name="+name+" age="+age;
    }
}

本文僅代表作者觀點,版權歸原創(chuàng)者所有,如需轉載請在文中注明來源及作者名字。

免責聲明:本文系轉載編輯文章,僅作分享之用。如分享內容、圖片侵犯到您的版權或非授權發(fā)布,請及時與我們聯(lián)系進行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com