当前位置:   article > 正文

继承中的Protected、final关键字_protected final

protected final

一、Protected关键字

Protected是一个访问权限修饰限定符,被它修饰的属性和方法可以在子类中访问,即使是在不同的包下。

父类:

  1. // 为了掩饰基类中不同访问权限在子类中的可见性,为了简单类B中就不设置成员方法了
  2. // extend01包中
  3. class B {
  4. private int a;
  5. protected int b; // 被protected修饰
  6. public int c;
  7. int d;
  8. }
  9. }

 同一个包中的子类,可以访问被protected修饰的属性/方法

  1. // extend01包中
  2. // 同一个包中的子类
  3. class D extends B{
  4. public void method(){
  5. // super.a = 10; // 编译报错,父类private成员在相同包子类中不可见
  6. super.b = 20; // 父类中protected成员在相同包子类中可以直接访问
  7. super.c = 30; // 父类中public成员在相同包子类中可以直接访问
  8. super.d = 40; // 父类中默认访问权限修饰的成员在相同包子类中可以直接访问
  9. }
  10. }

 不同包中的子类,可以访问被protected修饰的属性/方法

  1. // extend02包中
  2. // 不同包中的子类
  3. class C extends B {
  4. public void method(){
  5. // super.a = 10; // 编译报错,父类中private成员在不同包子类中不可见
  6. super.b = 20; // 父类中protected修饰的成员在不同包子类中可以直接访问
  7. super.c = 30; // 父类中public修饰的成员在不同包子类中可以直接访问
  8. //super.d = 40; // 父类中默认访问权限修饰的成员在不同包子类中不能直接访问
  9. }
  10. }

不同包中的普通类,不能访问被protected修饰的属性/方法

  1. // extend02包中
  2. // 不同包中的类
  3. class TestC {
  4. public static void main(String[] args) {
  5. C c = new C();
  6. c.method();
  7. // System.out.println(c.a); // 编译报错,父类中private成员在不同包其他类中不可见
  8. // System.out.println(c.b); // 父类中protected成员在不同包其他类中不能直接访问
  9. System.out.println(c.c); // 父类中public成员在不同包其他类中可以直接访问
  10. // System.out.println(c.d); // 父类中默认访问权限修饰的成员在不同包其他类中不能直接访问
  11. }
  12. }

二、final关键字

1、被final修饰的属性,不能被修改

  1. final int a = 20;
  2. a = 100;//编译出错

2、被final修饰的方法,不能被重写

在多态中会介绍

2、被final修饰的类,不能被继承(密封类)

  1. final class A {
  2. int a;
  3. }
  4. class B extends A{ //编译出错
  5. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/641904
推荐阅读
相关标签
  

闽ICP备14008679号