一、访问权限修饰符
1.修饰属性和方法
|
类内部 |
包内部 |
子类 |
包外部 |
默认 |
√ |
√ |
|
|
public |
√ |
√ |
√ |
√ |
private |
√ |
|
|
|
protected |
√ |
√ |
√ |
|
2.修饰类
|
类内部 |
包内部 |
子类 |
包外部 |
默认 |
√ |
√ |
|
|
public |
√ |
√ |
√ |
√ |
private |
√ |
|
|
|
protected |
√ |
|
|
|
零碎的一些知识点
- 被private、protected修饰的类一定是内部类,对于独立定义的类,一般不能被定义为private或protected
- 内部类只能被定义所在的类内部访问
- 内部类不能作为超类
- 无任何修饰的类叫做友好类
- 在另一个类中使用友好类创建对象时,需要确保他们在同一个包内部
练习
PA
package PackageA;
public class PA {
protected int id;
protected String name;
String sex;
private class PA1
{
public void print()
{
System.out.println("在PA类内部定义的私有类PA1,仅供PA访问");
}
}
protected class PA2
{
public void print()
{
System.out.println("在PA类内部定义的保护类PA2,仅供PA访问");
}
}
public PA(int i,String s)
{
id=i;
name=s;
}
protected int getId()
{
return id;
}
String getSex()
{
return sex;
}
public String getName()
{
return name;
}
public void print()
{
System.out.println("id:"+id);
System.out.println("Name:"+name);
System.out.println("Sex:"+sex);
}
public void print1()
{
PA1 pa1=new PA1();
pa1.print();
PA2 pa2=new PA2();
pa2.print();
}
}
PB
package PackageA;
public class PB {
public static void main(String[] args)
{
PA a=new PA(1,"张三");
a.print();
a.id=2;
a.name="李四";
System.out.println("id:"+a.getId());
System.out.println("name:"+a.getName());
}
}
运行结果
Test
package PackageB;
import PackageA.*;
public class TestProtected {
public static void main(String[] args)
{
PA a=new PA(1,"张三");
a.print();
System.out.println("Name:"+a.getName());
}
}
运行结果
二、方法的参数传递方式
示例
package PackageA;
public class Para {
String value;
public static void value(String a,String b,String c,String d)
{
a=a.concat(b);
c=b;
d=new String(a);
System.out.println("改变变量值之后:a="+a+",b="+b+",c="+c+",d="+d);
}
public static void change(Para a,Para b,Para c,Para d)
{
a.value=a.value.concat(b.value);
c.value=b.value;
d.value=new String(a.value);
System.out.println("改变变量值之后:a="+a+",b="+b+",c="+c+",d="+d);
}
@Override
public String toString()
{
return value;
}
public static void main(String[] args)
{
String a,b,c,d;
a="aaa";
b="bbb";
c="ccc";
d="ddd";
System.out.println("调用value之前:a="+a+",b="+b+",c="+c+",d="+d);
value(a,b,c,d);
System.out.println("调用value之后:a="+a+",b="+b+",c="+c+",d="+d);
Para a1,b1,c1,d1;
a1=new Para();
b1=new Para();
c1=new Para();
d1=new Para();
a1.value="aaaa";
b1.value="bbbb";
c1.value="cccc";
d1.value="dddd";
System.out.println("调用change之前:a1="+a1+",b1="+b1+",c1="+c1+",d1="+d1);
change(a1,b1,c1,d1);
System.out.println("调用change之后:a1="+a1+",b1="+b1+",c1="+c1+",d1="+d1);
}
}
运行结果