概述
背景:介绍Java访问控制修饰符的使用,本篇只贴代码,着重看注释,详见菜鸟教程!
1、新建一个Demo7,受保护的构造函数,只能被在相同包下的其他类调用。被私有的变量不能直接被外部类调用,需要创建公有的setter和getter方法,才能被相同类下其他类调用。
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方法:
// 相同类下的继承父类,子类可以调用父类非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的方法和变量。
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的结果也是一样被改变:
给demo7私有的变量str创建public公有的setters和getters方法,供外部类使用赋值:加速后:101
demo8继承demo7的私有变量str提供的公共的getter和setter方法,共外部类使用赋值:减速后:9
最后
以上就是自然花瓣为你收集整理的Java课堂笔记之访问控制修饰符:private、protected、public的全部内容,希望文章能够帮你解决Java课堂笔记之访问控制修饰符:private、protected、public所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复