探索java的 protect/private变量
package myPack;
/*
* Author:LiuXueYi
* Date:2021-10-18 14:29
* Description:测试 protect、private变量的权限范围
*/
public class BaseClass {
public String myPublic = "aaaaaaaa" ;
private String basePrivate = "bbbb";
protected String baseProtected = "ccccc";
public void myPrint(){
System.out.println("-------类的成员函数可以访问同类的所有成员---------");
System.out.println("myPublic = " + myPublic);
System.out.println("basePrivate = " + basePrivate);
System.out.println("baseProtected = " + baseProtected);
}
public static void main(String[] args){
BaseClass baseClass = new BaseClass();
baseClass.myPrint();
System.out.println("-------类中的main函数可以访问同类的所有成员");
System.out.println("myPublic = " + baseClass.myPublic);
System.out.println("basePrivate = " +baseClass.basePrivate);
System.out.println("baseProtected = " + baseClass.baseProtected);
}
}
/**
* 本包中类外部实例化:
* 1、在类的外部(本包中)可以通过实例化的对象访问 类的 protect 变量,不能访问 private 变量
*/
class OutMain {
public static void main(String[] args) {
BaseClass baseClass = new BaseClass();
System.out.println("-------在类的外部通过实例化对象访问 public 变量---------");
System.out.println("myPublic = " + baseClass.myPublic);
System.out.println("-------本包中在类的外部也可以通过类的实例访问 protect 变量---------");
System.out.println("baseProtected = " + baseClass.baseProtected);
System.out.println("-------在类的外部(本包中),不能通过实例化对象访问 private 变量---------");
//System.out.println("basePrivate = " + baseClass.basePrivate);
}
}
/**
* 派生类:
* 1、(本包中)派生类可以访问父类的 protect 变量,不能访问 private 变量
*/
class DeriveClass extends BaseClass {
private String dPrivate = "派生类的私有变量";
public void derivePrint() {
System.out.println("-------派生类中可访问基类的 public 变量---------");
System.out.println("myPublic = " + myPublic);
System.out.println("-------派生类中可访问基类的 protect 变量---------");
System.out.println("baseProtected = " + baseProtected);
System.out.println("-------派生类中不能访问基类的 private 变量---------");//
//System.out.println("basePrivate = " + basePrivate);
}
}
/**
* 派生类实例化对象:
* 1、可以通过派生类的实例化对象访问基类的 protect 变量,不能访问基类的 private 变量;
* 2、可以通过派生类的实例化对象访问派生类的 protect 变量,不能访问派生类的 private 变量;
*/
class TestDeriveMain {
public static void main(String[] args) {
DeriveClass deriveClass = new DeriveClass();
System.out.println("\n=======通过派生类的实例对象调用其方法 derivePrint() --- start =========");
deriveClass.derivePrint();
System.out.println("=======通过派生类的实例对象调用其方法 derivePrint()---- end =========\n");
System.out.println("-------通过派生类的实例对象访问基类的 public 变量---------");
System.out.println("myPublic = " + deriveClass.myPublic);
System.out.println("-------通过派生类的实例对象访问基类的 protect 变量---------");
System.out.println("baseProtected = " + deriveClass.baseProtected);
System.out.println("-------不能通过派生类的实例对象访问基类的私有成员变量 basePrivate---------");
//System.out.println("basePrivate = " + deriveClass.basePrivate);
System.out.println("-------不能通过派生类的实例对象访问派自己类中的私有成员变量---------");
//System.out.println("dPrivate = " + deriveClass.dPrivate);
}
}
/*****************************************包2*************************/
package myPack2;
import myPack.BaseClass;
/*
* Author:LiuXueYi
* Date:2021-10-18 14:20
* Description:<描述>
*/
public class testPrivate {
public static void main(String[] args){
System.out.println("-------调用外部包的派生类-------------");
MyDeriveClass myDeriveClass = new MyDeriveClass();
myDeriveClass.deriveClassPrint();
BaseClass baseClassNew = new BaseClass();
System.out.println("\n-------外部包通过实例化对象可访问基类的 public 变量 ----------");
System.out.println("myPublic = " + baseClassNew.myPublic);
System.out.println("\n-------外部包不能通过实例化对象访问 protect 变量 ----------");
//System.out.println("myProtected = " + baseClassNew.myProtected);
System.out.println("\n-------外部包实例化对象始终不能访问私有变量 ----------");
//System.out.println("myPrivate = " + baseClassNew.myPrivate);
}
}
/**
* 在包的外部继承类
*/
class MyDeriveClass extends BaseClass {
public void deriveClassPrint(){
System.out.println("-------外部包的派生类可访问基类的 public 变量---------");
System.out.println("myPublic = " + myPublic);
System.out.println("-------外部包的派生类可访问基类的 Protected 变量---------");
System.out.println("myProtected = " + baseProtected);
System.out.println("-------外部包的派生类不可访问基类的 Private 变量---------");
//System.out.println("myPrivate = " + basePrivate);
}
}