内部类的概述和访问特点
概述:就是一个类中定义一个类。举例:在一个A类中定义一个B类,则B类称为内部类
访问特点:
- 内部类可以直接访问外部类的成员,包括私有
- 外部类要想访问内部类成员,就必须创建对象:
- 格式:
修饰 class 类名{
修饰 class 类名{
}
}
图文和代码所示:
图:
方法一: 提倡!!!!!!!!!
原因:当内部类变为私有时候,此时就要用外部类的公有方法来进行内部类实例化,从而调用外部类的方法(私/公有)
Outer类(含Ienner类)
package CCom.Cnn;
public class Outer {//外
private int num=10;
private void show1(){
System.out.println("111");
}
public void method(){
Inner i=new Inner();
i.show();
}//通常在外部类定义一个方法来来new私有类,从而调用自身外部类方法 ------ 这就是方法一的精髓之处
private class Inner{//内
public void show(){
System.out.println(num);
show1();
}
}
}
Demo类(测试类)
package CCom.Cnn;
public class Demo {
public static void main(String[] args) {
Outer o = new Outer();//只需要外部类实例化
o.method();//既不暴露内部私有类,还可以通过唯一方法来调用自己目的
}
}
输出的内容:
10
111
方法二: 了解了解,但必须也知道
格式:外部类.内部类 引用变量=new 外部类().new 内部类();
弊端: 当内部类被private修饰,则方法二失效。
Outer类(含Ienner类)
package CCom.Cnn;
public class Outer {//外
private int num=10;
private void show1(){
System.out.println("111");
}
public class Inner{//内 //注意-此时内部类是public修饰的
public void show(){
System.out.println(num);//输出外部类的私有属性
show1();//调用外部类私有方法
}
}
}
Demo类(测试类)
package CCom.Cnn;
public class Demo {
public static void main(String[] args) {
/*
实例化只适用于内部类,但是容易暴露自己,
如果该内部类方法为私有的那就不行了!!!
*/
Outer.Inner a=new Outer().new Inner();//前提是内部类Inner是被public修饰才行
a.show();
}
}
输出的结果:
10
111