学习-Java类和对象之访问限制

第1关:学习-Java类和对象之访问限制


任务描述

本关任务:实现图书类,该类包含了图书的基本属性和信息。

相关知识

为了完成本关任务,你需要掌握:Java 访问控制修饰符的使用。

Java 中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

访问控制符是一组限定类、属性或方法是否可以被程序里的其他部分访问和调用的修饰符。类的访问控制符只能是空或者 public,方法和属性的访问控制符有 4 个,分别是 public、 private、protected 和 default,其中 default 是一种没有定义专门的访问控制符的默认情况。

我们可以通过下表来说明访问权限:

|修饰符|当前类|同一包内|子孙类(同一包)|子孙类(不同包)|其他包| |:—:|:—:|:—:|:—:|:—:| |public|Y|Y|Y|Y|Y| |protected|Y|Y|Y|Y/N(说明)|N| |default|Y|Y|Y|N|N| |private|Y|N|N|N|N|

访问控制存在的原因:

  1. 让客户端程序员无法触及他们不应该触及的部分;
  2. 允许库设计者改变类内部的工作方式而不用担心会影响到客户端程序员。

default

如果一个类没有访问控制符,说明它具有默认的访问控制特性。这种默认的访问控制权规定,该类只能被同一个包中的类访问和引用,而不能被其他包中的类使用。

例如:

Demo 类现在使用的是默认控制符,并且它在 com.test 包中。

 
  1. package com.test
  2. class Demo {
  3. }

Person 类也处于 com.test 包中。

 
  1. package com.test
  2. import com.test.Demo;
  3. class Person {
  4. Demo d;
  5. }

上面的这两个类都处于同一个包中,它们被默认控制符所修饰,所以两个类可以相互访问。而假如 Demo 类处于 com 包中,则它们就不能互相访问。

public

共有的,是访问权限限制最宽的修饰符。被 public 修饰的类、属性、及方法不仅可以跨类访问,而且可以跨包访问。 例如:

 
  1. public static void main(String[] args) {
  2. }

我们之前所定义的主方法不管在哪个类中,哪个包中,都可以被访问。

private

用 private 修饰的类成员、属性以及方法只能被该类的对象访问,而不能被任何其他类(包括该类的子类)访问和引用。因此,private 修饰符具有最高的保护级别。声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。

例如:

 
  1. public class Person {
  2. private String name;
  3. private int age;
  4. public String getName() {
  5. return name;
  6. }
  7. public void setName(String name) {
  8. this.name = name;
  9. }
  10. public int getAge() {
  11. return age;
  12. }
  13. public void setAge(int age) {
  14. this.age = age;
  15. }
  16. }

实例中,Person 类中的 age 和 name 变量为私有变量,所以其他类不能直接得到和设置该变量的值。为了使其他类能够操作该变量,定义了两个变量的 get 和 set 方法,用来获取变量的值和设置变量的值。

 
  1. public class Demo {
  2. public static void main(String[] args) {
  3. Person person = new Person();
  4. person.setAge(18);
  5. person.setName("张三");
  6. System.out.printf("我的名字叫%s,今年%d岁",person.getName(),person.getAge());
  7. }
  8. }

执行结果:

 
  1. 我的名字叫张三,今年18岁

protected

用保护访问控制符 protected 修饰的类成员可以被三种类所访问:该类自身、与它在同一个包中的其他类以及在其他包中的该类的子类。protected 修饰符的主要作用,是允许其他包中它的子类来访问父类的特定属性和方法,否则可以使用默认访问控制符。

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。


开始你的任务吧,祝你成功!

/**
 * 任务:实现图书类,该类包含了图书的基本属性和信息。
 * 类名为:Book
 */

// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
public class Book {
    // 定义四个私有变量
    // 图书名称(bookName String)
    // 图书单价(price double)
    // 图书库存(total int)
    // 图书id(bookId int)
    private String bookName;
    private double price;
    private int total;
    private int bookId;
    // 获取图书名称
    public String getBookName() {
        return bookName;
    }
    // 设置图书名称
    public void setBookName(String bookName) {
        this.bookName=bookName;
    }
    // 获取图书单价
    public double getPrice() {
        return price;
    }
    // 设置图书单价
    public void setPrice(double price) {
        this.price=price;
    }
    // 获取图书库存
    public int getTotal() {
        return total;
    }
    // 设置图书库存
    public void setTotal(int total) {
        this.total=total;
    }
    // 获取图书id
    public int getBookId() {
        return bookId;
    }
    // 设置图书id
    public void setBookId(int bookId) {
        this.bookId=bookId;
    }
    
}
/********** End **********/

### 回答1: 好的,第1关是学习Java类和对象中的访问限制。在Java中,我们可以使用访问修饰符来控制、变量、方法和构造函数的访问权限。其中,public表示公共的,可以被任何访问;private表示私有的,只能在本访问;protected表示受保护的,可以在本、同一包中的其他以及不同包中的子访问;而默认的访问修饰符则表示同一包中的其他可以访问。 ### 回答2: Java中,访问限制是指控制、方法、变量等成员的可见性及可访问性的规则和机制。在Java中有四种访问权限:public、protected、default(包访问权限)和private,具体含义如下: public:公共的,即任何地方都可以访问。 protected:保护的,该类内部、同包的、子都可以访问,其他非同包的不能访问。 default:包访问权限,只有在同一包内的才能访问,默认的修饰符,也可以省略不写。 private:私有的,只能在该类内部访问,其他的、子都不能访问。 在Java中,访问权限的设置是为了提高代码的可维护性和安全性。通过设置合理的访问权限,可以保护敏感数据或方法不受到外部的干扰,避免程序出错或数据泄露的问题。 在使用访问权限时,需要注意以下几点: 1.变量的访问权限要尽量设置为private,通过公共的setter和getter方法来获取或修改其值。 2.在同一个包内的,可以使用不带访问权限修饰符的方法和变量来实现内部访问。 3.子可以继承父的方法和变量,但是访问权限必须是protected或public。 4.在Java中,内部可以访问其外部的所有成员,包括私有成员。 总之,在Java程序设计中,访问权限是一个非常重要的概念。通过合理地设置访问权限,可以保证程序的正确性和数据的安全性,减少问题的发生概率,提高代码的可维护性和可读性。 ### 回答3: Java中的访问控制是指限制对象的访问范围和方式,保护数据安全和程序的正确性,防止代码被恶意更改或利用。Java中主要有四种访问控制权限,分别是public、protected、default和private。 1. public权限:public表示公共的,任何地方都可以访问该方法或者属性。 例如: public class Animal { public void eat() { System.out.println("动物在吃东西"); } } 在上述代码中,eat()方法是公共的,其他可以调用该方法。 2. protected权限:protected表示受保护的,只有本和子可以访问该方法或者属性。 例如: public class Dog extends Animal { protected void bark() { System.out.println("狗在汪汪叫"); } } 在上述代码中,bark()方法是受保护的,只有Dog及其子可以调用该方法。 3. default权限:default表示默认的,即不加访问控制符号。同一个包内的可以访问该方法或者属性,不同包内的无法访问。 例如: class Fruit { void taste() { System.out.println("水果味道很棒"); } } 在上述代码中,taste()方法是默认权限,只有同一个包内的可以调用该方法。 4. private权限:private表示私有的,只有本可以访问该方法或者属性。 例如: public class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } private String getInfo() { return "姓名:" + name + ", 年龄:" + age; } } 在上述代码中,getInfo()方法是私有的,只有Student可以调用该方法。 通过使用访问控制符号,可以将程序分成若干个独立的、安全的模块,从而更好地组织程序结构,降低程序的复杂性和错误率。在开发Java程序时应该注意合理使用访问控制权限,遵循封装、继承和多态的原则,提高程序的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值