【面试题05】private、protected、public、final 区别是什么

这篇具有很好参考价值的文章主要介绍了【面试题05】private、protected、public、final 区别是什么。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、介绍

本文已收录于PHP全栈系列专栏:PHP面试专区。
计划将全覆盖PHP开发领域所有的面试题,对标资深工程师/架构师序列,欢迎大家提前关注锁定。

关于这几个限定词,是一些比较基础的面试题,一般我们肯定知道他们的用法,但是为什么这么用,很多时候还是值得思考的。今天本文就这几种情况进行一下说明,各位面试的宝宝记得先给一个关注或者收藏,避免以后找不到了。

在PHP中,类成员和方法有不同的访问级别。访问级别定义了一个成员或方法谁能够访问它。PHP中有四个访问级别:private、protected、public和final。本篇博文将介绍这几个访问级别,并分析它们之间的区别。

二、四种限定词区别

2.1 private

当成员或方法被声明为private时,它只能在所属类内部被访问。外部代码不能访问这个成员或方法。我们来看一个例子:

class Person {
    private $name;

    public function showName() {
        echo $this->name;
    }
}

$person = new Person();
$person->name = "XiaoMin"; // 这里会报错,因为$name是private类型

在上面的例子中,我们创建了一个类Person,其中包含一个私有成员 n a m e 。 s h o w N a m e ( ) 方法尝试输出 name。showName()方法尝试输出 nameshowName()方法尝试输出name的值,但由于 n a m e 的访问级别是 p r i v a t e ,而外部代码又直接尝试给 name的访问级别是private,而外部代码又直接尝试给 name的访问级别是private,而外部代码又直接尝试给name赋值,所以程序报错。

需要注意的是,子类无法访问父类中的私有成员或方法。下面是一个例子:

class Person {
    private $name;
}

class Student extends Person {
    public function showName() {
        echo $this->name; // 这里会报错,因为$name是private类型
    }
}

在上面的例子中,我们定义了一个父类Person和一个子类Student。子类Student尝试在showName()方法中输出父类Person中的私有成员$name,但由于$name的访问级别是private,所以程序报错。

2.2 protected

当成员或方法被声明为protected时,它只能在所属类和子类中被访问。外部代码不能访问这个成员或方法。接下来我们看一个例子:

class Person {
    protected $name;
}

class Student extends Person {
    public function showName() {
        echo $this->name; // 可以访问父类中的$name
    }
}

$student = new Student();
$student->name = "XiaoMin"; // 这里会报错,因为$name是protected类型

在上面的例子中,我们定义了一个父类Person和一个子类Student。父类Person包含一个受保护的成员$name,子类Student可以访问该成员并将其输出。但外部代码不能直接访问该成员,否则会报错。

需要注意的是,在子类中调用父类的受保护方法时,可以使用parent关键字。下面是一个例子:

class Person {
    protected $name;

    protected function getName() {
        return $this->name;
    }
}

class Student extends Person {
    public function showName() {
        echo parent::getName(); // 调用父类的getName()方法
    }
}

在上面的例子中,我们定义了一个父类Person和一个子类Student。父类Person包含一个受保护的getName()方法,该方法返回$name的值。子类Student通过调用parent::getName()方法来获取$name的值。

2.3 public

当成员或方法被声明为public时,它可以在任何地方被访问,包括类内部、子类和外部代码。下面是一个例子:

class Person {
    public $name;
}

$person = new Person();
$person->name = "XiaoMin"; // 可以直接访问$name

在上面的例子中,我们定义了一个类Person,并将$name成员声明为public访问级别。外部代码可以直接访问该成员并给它赋值。

需要注意的是,尽管public成员可以在任何地方被访问,但这并不代表我们应该在代码中到处使用public成员。这样做可能会增加代码的复杂性,并使代码更难以维护。因此,我们应该尽可能地对类成员使用private或protected访问级别,只有在真正需要时才将其改为public。

2.4 final

当一个类或方法被声明为final时,它不能被继承或覆盖。下面是一个例子:

final class Person {
    protected $name;

    public function showName() {
        echo $this->name;
    }
}

class Student extends Person { 
// 这里会报错,因为Person类是final的,不能被继承
}

在上面的例子中,我们定义了一个类Person,并将其声明为final。这意味着Person类不能被继承。子类Student尝试从Person类中继承成员和方法,但由于Person类是final的,所以程序报错。

需要注意的是,虽然final成员和方法不能被覆盖,但它们仍然可以被子类继承和访问。

总结

本篇博文介绍了PHP中的四种访问级别:private、protected、public和final。private成员和方法只能在所属类内部被访问,protected成员和方法可以在所属类和子类中被访问,public成员和方法可以在任何地方被访问,final类和方法不能被继承或覆盖。在编写代码时,应该根据具体情况选择适当的访问级别,避免滥用public成员和方法。文章来源地址https://www.toymoban.com/news/detail-496769.html

到了这里,关于【面试题05】private、protected、public、final 区别是什么的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java当中四种权限刨析( private、default、protected、public)

    目录 一、java权限简介 二、举例使用 1.private 2.默认权限(default) 3.protected 4.public 注意        java当中有4种访问修饰限定符privat、default(默认访问权限),protected以及public。只有默认访问权限和public能够用来修饰类。修饰类的变量和方法四种权限都可以。 private:如果一个

    2024年02月06日
    浏览(43)
  • Controller 中的请求方法,private 和 public有什么区别?别用错了!

    作者:hinotoyk 链接:https://juejin.cn/post/6910215219822362632 背景:某日在公司中撸代码的时候,在一个常用的controller中添加一个方法,测试时突然报错说注入的service为null,捣鼓一阵发现后是方法修饰符写成private,修改成public后搞定。为什么会产生这个问题呢?就自己测试一下是哪

    2024年02月08日
    浏览(38)
  • 轻松理解Java中的public、private、static和final

    一、概念 1、public和private 两个都是访问权限修饰符,用于控制外界对类内部成员的访问。 public:表明对象成员是完全共有的,外界可以随意访问。用public修饰的数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用。 private:表明对象成员是完全私有的,不

    2024年02月16日
    浏览(44)
  • 【C++】继承 ⑤ ( public 公有继承 - 示例分析 | protected 保护继承 - 示例分析 | private 私有继承 - 示例分析 )

    成员的访问属性 需要看根据下面的逻辑进行判定 : 调用位置 : 看是在哪调用的 , 在 类内部 , 派生类 ( 子类 ) , 还是在 类外部 ; 子类继承方式 : 公有继承 : public 保护继承 : protected 私有继承 : private 父类中的访问级别 : 公有成员 : public 保护成员 : protected 私有成员 : private 如 :

    2024年02月08日
    浏览(38)
  • 每日一道面试题之final、finally、finalize 有什么区别?

    final是Java中的 ,用于 修饰变量、方法或类 ,被final修饰的类表示 该类不能被继承 ,被final修饰的变量表示 该变量不能赋新的值 ,被final修饰的方法表示 该方法不能被重写 . finally是Java中的 ,用于 定义在try-catch语句块中的一个代码块 ,无论是否发生异常都会执

    2024年02月08日
    浏览(45)
  • JAVA常见面试题-在java中String类为什么要设计成final?

    这简直就是2023Java面试题最经典的问题之一了,非常经典的Java基础知识,一定要学会! 在Java中,String类被设计成final,这意味着它的值在创建后不可更改 。这是因为字符串在Java中使用广泛,作为文本处理、网络通信等方面的核心数据类型。如果String类是可变的,那么在使用

    2024年02月12日
    浏览(54)
  • 第八章:私有 / 公共函数 Private / Public Functions

    ​ Solidity 定义的函数的属性默认为公共。 这就意味着任何一方 (或其它合约) 都可以调用你合约里的函数。 显然,不是什么时候都需要这样,而且这样的合约易于受到攻击。 所以将自己的函数定义为私有是一个好的编程习惯,只有当你需要外部世界调用它时才将它设置为公

    2024年02月11日
    浏览(51)
  • java面试题(21):private修饰的方法可以通过反射访问,那么private的意义是什么?

    1 反射简介 Java,在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但有没有其他方法可以访问呢?答案是有的,这就是java反射带来的便利。利用反射访问类的私有属性及方

    2024年01月22日
    浏览(41)
  • Unity 之 变量修饰符public 与private 以及默认

    当在Unity中使用 public 修饰符时,它将变量声明为 公共变量 ,这意味着该变量可以在Unity编辑器中进行设置,并且可以从其他脚本中访问和修改。公共变量在Unity中广泛用于在脚本之间共享数据,以及在Inspector面板中显示自定义设置。以下是关于 public 修饰符的详细信息和示例

    2024年02月11日
    浏览(46)
  • private static final Long serialVersionUID= 1L详解

    我们知道在对数据进行传输时,需要将其进行序列化,在Java中实现序列化的方式也很简单,可以直接通过实现Serializable接口。但是我们经常也会看到下面接这一行代码, 这段代码到底有什么用呢? 为什么有些代码写了它,有些代码没写? 首先我们看这一段代码 执行该段代

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包