我是靠谱客的博主 自然花瓣,这篇文章主要介绍Java课堂笔记之访问控制修饰符:private、protected、public,现在分享给大家,希望可以做个参考。

背景:介绍Java访问控制修饰符的使用,本篇只贴代码,着重看注释,详见菜鸟教程!

1、新建一个Demo7,受保护的构造函数,只能被在相同包下的其他类调用。被私有的变量不能直接被外部类调用,需要创建公有的setter和getter方法,才能被相同类下其他类调用。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class Demo7{ /* * 权限修饰符:private、protected、public、default private、default修饰的类只能在相同的包目录下被使用, * 声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。 * private修饰的变量,需要创建公有的getter和setter方法才能被使用 public公有的可以被任何包和外部类使用; * protected修饰的方法、变量、构造器能被同一个包中的任何其他类访问 */ int speed; // 私有化,不能被其他外部类访问,只能在同类中使用 private String str = "我是汽车"; // protected修饰变量 protected int endSpeed; // 私有变量str的公共方法 public String getStr() { return str; } public void setStr(String str) { this.str = str; } // 我是demo7的有参构造函数,私有修饰的private不能被继承和外部类调用,所以为了演示java继承类,构造函数不能被私有修饰 protected Demo7(int startspeed) { speed = startspeed; } // public(公共控制符) public String increaseSpeed(int speed) { speed++; // System.out.println("7加速了~"+speed); return str + "加速后:" + speed; } // protected(保护访问控制符)指定该方法可以被它的类和子类进行访问。 // 受保护的方法可以被同一个包中的任何类访问 // 不同包里只能被之类访问 protected String decreaseSpeed(int speed) { speed--; return str + "减速后:" + speed; } // 私有方法,不能被子类调用,只能在本类被调用 private String reverseCharacters(String originalString) { String reverse = ""; for (int i = originalString.length() - 1; i >= 0; i--) { reverse = reverse + originalString.charAt(i); } return reverse; } }

2、再创建一个Demo8继承Demo7,但是不能调用父类私有修饰的reverseCharacters方法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 相同类下的继承父类,子类可以调用父类非private修饰的方法、变量 public class Demo8 extends Demo7 { // 继承Demo7中私有变量的公用getter和setter方法 @Override public String getStr() { // TODO Auto-generated method stub return super.getStr(); } @Override public void setStr(String str) { // TODO Auto-generated method stub super.setStr(str); } // 子类 的构造方法 public Demo8(int startspeed) { super(startspeed); // TODO Auto-generated constructor stub } public void specialMethod() { System.out.println("子类特有的方法!"); } // 被继承的类的方法权限是什么,继承者就使用什么权限 @Override public String increaseSpeed(int speed) { // 子类可以直接调用父类的变量和方法 // 同一个包的其他可以使用父类的protected修饰的变量 endSpeed++; // 子类可以调用父类protected修饰的方式和变量, decreaseSpeed(5); // TODO Auto-generated method stub return super.increaseSpeed(speed); } @Override protected String decreaseSpeed(int speed) { // TODO Auto-generated method stub return super.decreaseSpeed(speed); } }

3、再创建一个测试类Demo6,创建对象并调用Demo7、Demo8的方法和变量。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Demo6 { public static void main(String[] args) { int speed = 0; Demo7 d7 = new Demo7(speed); Demo8 d8 = new Demo8(speed); // d7.str; 在其他类无法访问demo7中私有的变量 // 也就是可以覆盖原来类的变量的值 d7.setStr("给demo7私有的变量str创建public公有的setters和getters方法,供外部类使用赋值:"); System.out.println(d7.increaseSpeed(100)); d8.setStr("demo8继承demo7的私有变量str提供的公共的getter和setter方法,共外部类使用赋值:"); System.out.println(d8.decreaseSpeed(10)); } }

结果就是d7通过setter方法改变了原str的值,同样Demo8继承Demo7的结果也是一样被改变:

复制代码
1
2
3
给demo7私有的变量str创建public公有的setters和getters方法,供外部类使用赋值:加速后:101 demo8继承demo7的私有变量str提供的公共的getter和setter方法,共外部类使用赋值:减速后:9

 

最后

以上就是自然花瓣最近收集整理的关于Java课堂笔记之访问控制修饰符:private、protected、public的全部内容,更多相关Java课堂笔记之访问控制修饰符内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部