小言_互联网的博客

Java零基础进阶篇之面向对象-访问控制权限

318人阅读  评论(0)

本篇文章讲解的知识点主要围绕面向对象中的访问控制权限,废话不多说,只分享Java相关的干货!

java 访问级别修饰符主要包括:private protected public,可以限定其他类对该类、属性和方法的使用权限,

注意以上对类的修饰只有:public default内部类除外

 

1private

【示例代码】

 


   
  1. public class PrivateTest01 {
  2. public static void main(String[] args) { A a = new A();
  3. //不能访问,private 声明的变量或方法,只能在同一个类中使用
  4. System.out.println(a.id);
  5. }
  6. }
  7. class A {
  8. private int id;
  9. }

2protected

【代码实例】,在同一个包下,建立类 ProtectedTest01A,并建立 B 继承 A


   
  1. public class ProtectedTest01 {
  2. public static void main(String[] args) { A a = new A();
  3. a.method1(); A b = new B(); b.method1();
  4. B b1 = new B(); b1.method3();
  5. }
  6. }
  7. class A {
  8. //采用protected 声明的变量或方法只有子类或同一个包下的类可以调用
  9. protected int id = 100;
  10. public void method1() { System.out.println(id);
  11. }
  12. protected void method2() { System.out.println( "A.method2()");
  13. }
  14. }
  15. class B extends A {
  16. public void method1() {
  17. //因为和A 在同一个包下
  18. System.out.println(id);
  19. }
  20. public void method3() {
  21. //可以正确调用method2();
  22. }
  23. }

【代码示例】,在 test1 下建立类 C1,在 test2 下建立 ProtectedTest02 C2


   
  1. package test2;
  2. import test1.C1;
  3. public class ProtectedTest02 {
  4. public static void main(String[] args) { new C2().method2();
  5. }
  6. }
  7. class C2 extends C1 {
  8. public void method2() {
  9. //可以调用,主要原因C2 是 C1 的子类
  10. //所以可以访问protected 声明的变量
  11. System.out.println(id); method1();
  12. }
  13. }
  14. class C3 {
  15. public void method3() {
  16. //不能在其他类中访问protected 声明的方法或变量
  17. //new C1().method1();
  18. }
  19. }

 

3default

如果 class 不采用 public 修饰,那么此时的 class,只能被该包下的类访问,其他包下无法访问


   
  1. import test3.D;
  2. public class DefaultTest01 {
  3. public static void main(String[] args) { D d = new D();
  4. d.method1();
  5. //不能访问,只有在一个类中或在同一个包下可以访问
  6. //在子类中也不能访问d.method2();
  7. }
  8. }

 

内部类

在一个类的内部定义的类,称为内部类

内部类主要分类:

  • 实例内部类

  • 局部内部类

  • 静态内部类

1、实例内部类

  • 创建实例内部类,外部类的实例必须已经创建

  • 实例内部类会持有外部类的引用

  • 实例内部不能定义 static 成员,只能定义实例成员


   
  1. public class InnerClassTest01 {
  2. private int a;
  3. private int b;
  4. InnerClassTest01( int a, int b) { this.a = a;
  5. this.b = b;
  6. }
  7. //内部类可以使用private 和protected 修饰
  8. private class Inner1 { int i1 = 0;
  9. int i2 = 1;
  10. int i3 = a; int i4 = b;
  11. //实例内部类不能采用static 声明
  12. //static int i5 = 20;
  13. }
  14. public static void main(String[] args) {
  15. InnerClassTest01.Inner1 inner1 = new InnerClassTest01( 100, 200). new Inner1();
  16. System.out.println(inner1.i1); System.out.println(inner1.i2); System.out.println(inner1.i3); System.out.println(inner1.i4);
  17. }
  18. }

 

2、静态内部类

  • 静态内部类不会持有外部的类的引用,创建时可以不用创建外部类

  • 静态内部类可以访问外部的静态变量,如果访问外部类的成员变量必须通过外部类的实例访问

【示例代码】


    
  1. public class InnerClassTest02 {
  2. static int a = 200;
  3. int b = 300;
  4. static class Inner2 {
  5. //在静态内部类中可以定义实例变量int i1 = 10;
  6. int i2 = 20;
  7. //可以定义静态变量static int i3 = 100;
  8. //可以直接使用外部类的静态变量static int i4 = a;
  9. //不能直接引用外部类的实例变量
  10. //int i5 = b;
  11. //采用外部类的引用可以取得成员变量的值int i5 = new InnerClassTest02().b;
  12. }
  13. public static void main(String[] args) {
  14. InnerClassTest02.Inner2 inner = new InnerClassTest02.Inner2(); System.out.println(inner.i1);
  15. }
  16. }

3、局部内部类

局部内部类是在方法中定义的,它只能在当前方法中使用。和局部变量的作用一样局部内部类和实例内部类一致,不能包含静态成员


    
  1. public class InnerClassTest03 {
  2. private int a = 100;
  3. //局部变量,在内部类中使用必须采用final 修饰
  4. public void method1(final int temp) { class Inner3 {
  5. int i1 = 10;
  6. //可以访问外部类的成员变量int i2 = a;
  7. int i3 = temp;
  8. }
  9. //使用内部类
  10. Inner3 inner3 = new Inner3();
  11. System.out.println(inner3.i1); System.out.println(inner3.i3);
  12. }
  13. public static void main(String[] args) {
  14. InnerClassTest03 innerClassTest03 = new InnerClassTest03(); innerClassTest03.method1( 300);
  15. }
  16. }

4、匿名内部类

是一种特殊的内部类,该类没有名字

  • 没有使用匿名类


    
  1. public class InnerClassTest04 {
  2. public static void main(String[] args) {
  3. MyInterface myInterface = new MyInterfaceImpl(); myInterface.add();
  4. }
  5. }
  6. interface MyInterface {
  7. public void add();
  8. }
  9. class MyInterfaceImpl implements MyInterface {
  10. public void add() {
  11. System.out.println( "-------add ");
  12. }
  13. }
  • 使用匿名类


    
  1. public class InnerClassTest05 {
  2. public static void main(String[] args) {
  3. /*
  4. MyInterface myInterface = new MyInterface() { public void add() {
  5. System.out.println("-------add ");
  6. }
  7. };
  8. myInterface.add();
  9. */
  10. /*
  11. MyInterface myInterface = new MyInterfaceImpl(); InnerClassTest05 innerClassTest05 = new InnerClassTest05(); innerClassTest05.method1(myInterface);
  12. */
  13. InnerClassTest05 innerClassTest05 = new InnerClassTest05(); innerClassTest05.method1( new MyInterface() {
  14. public void add() {
  15. System.out.println( "-------add ");
  16. }
  17. });
  18. }
  19. private void method1(MyInterface myInterface) { myInterface.add();
  20. }
  21. }
  22. interface MyInterface {
  23. public void add();
  24. }
  25. /*
  26. class MyInterfaceImpl implements MyInterface {
  27. public void add() {
  28. System.out.println("-------add ");
  29. }
  30. }
  31. */

以上就是访问控制权限相关的知识点了,配套视频教程👇,正在学习Java的同学们一定要持续关注哦~~

Java零基础进阶视频教程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载:https://blog.csdn.net/bjpowernode_com/article/details/111635552
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场