您的位置 首页 java

Java 的修饰符大礼包

语法知识不难,难点在于如何在项目中合理运用。

作为一名即将毕业的应届生,非常期待能够在项目中去运用看视频的这些知识。

看视频学过的知识点,学得快忘得快。所以,在模仿高老师的课程案例之前,我先复习一下类那里的知识点。其中,修饰符有两种,一种是访问修饰符,一种是非访问修饰符。

非访问修饰符常见的包括:

非访问修饰符

基本含义

static

静态的、 非实例的(本质) 、类的

final

最终的、不可改变的

abstract

抽象的,不可实例的

访问控制修饰符,权限由宽松到严格分别是:

  • public

最常见的一种了,哪里都能访问,不管是包里包外,子类、孙子类无关类等等。

  • Protected

只有同一个包里的才能访问,或者是子类也可以访问。

  • default(package only)

只有在同一个包下面才可以正常访问

  • private

就给自己用,子类也用不着。

为了生动地理解记忆,可以跟着我下面描述的场景进行想象和演练:

 package HomeGoods;

public class KitchenGoods {
     String  tag;
    String material;
    double price;

    public KitchenGoods(String tag,String material, double price) {
        this.material = material;
        this.tag = tag;
        this.price = price;
    }

    public KitchenGoods() {
    }

    private  void  getPrice() {  // 价格信息这么敏感,当然不能随便打印了。只有我这个类才可以。
        System.out.println("private: " + price);
    }

    void getGoods() {   // default 关键字是不用加的
        System.out.println("default: " + tag);
    }

    protected void getMaterial() {   // 材质就保护起来,我的子类或者包里的,可以查看
        System.out.println("proteced: " + material);
    }

    public void getInfo() {
        System.out.println("public: " + tag + "t" + price);
    }


}  

父类 KitchenGoods class,位于 HomeGoods包:

在 HomeGoods 包 里的 KitchenGoods 是这样定义的:

  • getPrice()的级别是 private;
  • getGoods()的级别是 default;
  • getMaterial() 的级别是 protected;
  • getInfo() 的级别是 public。

建一个新包,叫 Cups

在一个新的杯子包里,new 一个厨具类。

 package Cups;

import HomeGoods.KitchenGoods;

public class Test {
    public static void main(String[] args) {
        KitchenGoods glassCup = new KitchenGoods("KT001", "glass", 5.00);
        glassCup.getInfo();
    }
}  

运行结果:

有且只有这个 public 级别的 getInfo() 方法可以被调用。

如果我把 glassCup.getInfo(); 这一行换成glassCup.getGoods();

就会出现编译器检查到的错误,也就是 CheckedException。提醒我们这个是不能从包的外部去用的。

在不同包里,调那个 protected 对应的 getMaterial() 方法呢:

在父类所在的包里建新类

一模一样的代码,只是在变量名字后面加了 1:

除了 private 以外,都调成功了。

!记住了:同一个包里面,随你怎么闹腾,只要没标 private,都可以用。

测一下子类:

尽管我在子类里,试图重写父类的私有方法:

但还是在编译阶段就不通过了。

Protected 重点说明

1 不在同一个包里面,搞父类对象的 Protected 方法就报错了:

glassCup4 是外包下的类建的父类对象,没有办法用 Protected 方法了。

运行结果:

2 在同一个包里呢?

有图有真相:

你会发现,在同一个包就可以了。

小白错误收藏:

1 default 是不用加在类前面的。 什么也不加就已经是“默认”了。

2 emm,总是想把方法包在 print 里面是怎么回事。

3 在不同包下测 protected 的时候,建子类,然后无法被初始化:

然后按照 IDEA 提示加了 构造器 ,就不报错了。

4 在测子类的时候,因为经常复制粘贴,忘了改建子类的那一行,所以虽然我 new 了子类,但是前面的没改完,还是父类。大家在复制的时候还是要谨慎地过一遍的,看看该改的地方有没有改。

文章来源:智云一二三科技

文章标题:Java 的修饰符大礼包

文章地址:https://www.zhihuclub.com/192820.shtml

关于作者: 智云科技

热门文章

网站地图