1つは、アクセス許可修飾子です。
1.属性とメソッドの変更
|
クラス内 |
バッグの中 |
サブクラス |
包外部 |
デフォルト |
√ |
√ |
|
|
公衆 |
√ |
√ |
√ |
√ |
民間 |
√ |
|
|
|
保護 |
√ |
√ |
√ |
|
2.変更
|
クラス内 |
バッグの中 |
サブクラス |
包外部 |
デフォルト |
√ |
√ |
|
|
公衆 |
√ |
√ |
√ |
√ |
民間 |
√ |
|
|
|
保護 |
√ |
|
|
|
いくつかの知識
- 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());
}
}
運転結果
テスト
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);
}
}
運転結果