内部类public, private, protected, friend (转)

上一篇 / 下一篇  2010-05-11 22:15:25 / 个人分类:Java

以下只讨论用public,private,protected,friend修饰的类的public,private,protected,friend方法,不涉及静态类等情况.

一,classB要调用classinnerA的方法,首先要在classB处创建classinnerA的实例,classinnerA是classA的内部类,区别对待classB和classA属于同一程序集和不属于同一程序集的情况.

(一),classA和classB属于同一程序集

(1)如果在classA里classinnerA这样定义:
public class classinnerA

那么,可创建.
(2)如果在classA里classinnerA这样定义

friend class classinnerA

那么,可创建.
(3)如果在classA里classinnerA这样定义

protected class classinnerA

那么,如果classB 是classA的子类,那么可创建,否则,不可创建.
(4)如果在classA里classinnerA这样定义

private class classinnerA

那么,不可建立

(二),classA和classB不属于同一程序集

(1)如果在classA里classinnerA这样定义:
public class classinnerA

那么,可创建.
(2)如果在classA里classinnerA这样定义

friend class classinnerA

那么,不可创建.
(3)如果在classA里classinnerA这样定义

protected class classinnerA

那么,如果classB 是classA的子类,那么可创建,否则,不可创建.
(4)如果在classA里classinnerA这样定义

private class classinnerA

那么,不可建立

 二,如果已经建立了classinnerA的实例,假设定义为classinnera,接下来可以根据classinnerA中方法前的访问修饰符,来判断哪些方法可以调用了.同样区分classA和classB是否属于同一程序集.

(一)classA和classB属于同一程序集

(1)如果classinnerA中的方法这样定义:

public sub aaa()
那么,可调用,即classinnera.aaa()
(2)如果classinnerA中的方法这样定义:

friend sub aaa()
那么,可调用
(3)如果classinnerA中的方法这样定义:

protected sub aaa()

那么,如果classB 是classinnerA的子类,那么可调用,否则,不可调用.
(4)如果classinnerA中的方法这样定义:

private sub aaa()
那么,不可调用

(一)classA和classB不属于同一程序集

(1)如果classinnerA中的方法这样定义:

public sub aaa()
那么,可调用,即classinnera.aaa()
(2)如果classinnerA中的方法这样定义:

friend sub aaa()
那么,不可调用
(3)如果classinnerA中的方法这样定义:

protected sub aaa()

那么,如果classB 是classinnerA的子类,那么可调用,否则,不可调用.
(4)如果classinnerA中的方法这样定义:

private sub aaa()
那么,不可调用

 

结论:

以上红色和兰色字代表不同的地方.

1,只有内部类才能用protected和private来定义.

2,分清类的访问修饰符和方法的访问修饰符的区别.

3,内部类(classinnerA)的访问修饰符的理解成外部类(classA)的一个方法的访问修饰符.

4,classinnerA的访问由使用classinnerA的类(classB)和classA的关系确定.

5,aaa()的访问由使用aaa()的类(classB)和classinnerA的关系确定.


TAG:

 

评分:0

我来说两句

Open Toolbar