详述访问权限

详述访问权限

全面研究某个访问权限的使用范围需要从以下方面考虑
在这里插入图片描述
访问权限:public>protected>友好的>private
在这里插入图片描述
一、public
public是最大的访问权限修饰符,其修饰的成员变量、构造方法和普通方法可在任何一个类中被操作或使用;
二、private
private是最小的访问权限控制符,其修饰的成员变量、构造方法和普通方法只能在定义它们的类中被操作或使用;。
(public和private不在进行实验)
三、友好的
友好的访问权限大于private的访问权限,既然private修饰的属性或方法能在本类中使用,那么友好的修饰的属性或方法在本类中一定也能使用。
①同包继承

package cn.edu.zzu.father;

public class Father {
    	String name;
		void show() {
		System.out.println("好好学习");
	}
}
package cn.edu.zzu.father;


	public class Son extends Father{
		public static void main(String[] args) {
			Son son = new Son();
			son.name = "son";
			System.out.println(son.name);
			son.show();
			Father father = new Father();
			father.name = "father";
			System.out.println(father.name);
			father.show();
		}
	}

在这里插入图片描述
同包继承的情况下,无论是子类还是父类都能够通过创建对象的方式调用被默认也就是友好的修饰的属性或方法。
②同包非继承

package cn.edu.zzu.father;

public class Father {
	 	String name;
	 	void show() {
		System.out.println("好好学习");
	}
}
package cn.edu.zzu.father;


	public class Son {
		public static void main(String[] args) {
			Father father = new Father();
			father.name = "father";
			System.out.println(father.name);
			father.show();
		}
	}

在这里插入图片描述
在Son类中显然不能通过创建Son对象调用Father类中的对象或方法,但可以通过创建Father对象调用Father类中的对象或方法。
③不同包继承

package cn.edu.zzu.father;

public class Father {
		String name;
		void show() {
		System.out.println("好好学习");
	}
}
package cn.edu.zzu.son;

import cn.edu.zzu.father.Father;

public class Son extends Father{
		public static void main(String[] args) {
			Son son = new Son();
			son.name = "son";
			System.out.println(son.name);
			son.show();
//			Father father = new Father();
//			father.name = "father";
//			System.out.println(father.name);
//			father.show();
		}
	}

在这里插入图片描述
不同包继承情况下,子类显然可以通过继承的方式调用继承父类的属性或方法,但不能通过创建父类对象的方式调用父类的属性或方法。
④不同包不继承

package cn.edu.zzu.father;

public class Father {
		String name;
		void show() {
		System.out.println("好好学习");
	}
}
package cn.edu.zzu.son;

import cn.edu.zzu.father.Father;

public class Son extends Father{
		public static void main(String[] args) {
			Son son = new Son();
			son.name = "son";
			System.out.println(son.name);
			son.show();
			Father father = new Father();
			father.name = "father";
			System.out.println(father.name);
			father.show();
		}
	}

在这里插入图片描述
程序报错,不同包不继承情况下,在一个类中无法调用另一个类中被默认也称友好的修饰的属性或方法。
四、protected
protected的访问权限大于友好的访问权限,既然在同包的情况下,一个类可以调用另一个类中被友好的修饰的属性或方法,那么在同包的情况下,一个类同样可以调用另一个类中被protected修饰的属性或方法。
①不同包继承

package cn.edu.zzu.father;

public class Father {
	protected String name;
	protected void show() {
		System.out.println("好好学习");
	}
}
package cn.edu.zzu.son;

import cn.edu.zzu.father.Father;

public class Son extends Father{
		public static void main(String[] args) {
			Son son = new Son();
			son.name = "son";
			System.out.println(son.name);
			son.show();
			Father father = new Father();
//			father.name = "father";
//			System.out.println(father.name);
//			father.show();
		}
	}

在这里插入图片描述
如果protected修饰的属性和方法均为非静态的,则只能通过子类实例化对象调用其继承过来的属性和方法,而不能使用父类实例化的对象去调用;如果protected修饰的属性和方法均为静态的,则子类可以通过类(子类类名或父类类名)名直接调用。

package cn.edu.zzu.father;

public class Father {
	protected static String name;
	protected static void show() {
		System.out.println("好好学习");
	}
}
package cn.edu.zzu.son;

import cn.edu.zzu.father.Father;

public class Son extends Father{
		public static void main(String[] args) {
//			Son son = new Son();
			Son.name = "son";
			System.out.println(Son.name);
			Son.show();
//			Father father = new Father();
			Father.name = "father";
			System.out.println(Father.name);
			Father.show();
		}
	}

在这里插入图片描述
当然也可以通过创建父类对象的方式调用静态的属性和方法,但推荐使用类名调用。

②不同包非集成

package cn.edu.zzu.father;

public class Father {
	protected  String name;
	protected  void show() {
		System.out.println("好好学习");
	}
}
package cn.edu.zzu.son;

import cn.edu.zzu.father.Father;

public class Son {
		public static void main(String[] args) {
 			Son son = new Son();
			son.name = "son";
			System.out.println(son.name);
			son.show();
 			Father father = new Father();
			father.name = "father";
			System.out.println(father.name);
			Father.show();
		}
	}

在这里插入图片描述
程序将会报错。不同包不继承情况下,在一个类中无法调用另一个类中被protected修饰的属性或方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值