特点:
(1)在其他类中访问内部类的成员,需要先创建外部类的对象,再创建内部类的对象
外部类名.内部类名 对象名 = new 外部类().new 内部类();
(2)内部类可以直接访问外部类中的成员,包括私有
(3)外部类中想要访问内部类的成员,需要创建内部类的对象
代码
package demos4;
public class Demo01 {
public static void main(String[] args) {
//在其他类中,需要创建外部类对象和内部类对象来访问内部类成员
Body.Heart bh = new Body().new Heart();
System.out.println(bh.getBeats());
bh.print();
new Body().show();
}
}
class Body{
private String name = "张三";
//在类中定义一个类型,没有加任何修饰符:普通的成员内部类
class Heart{
private int beats = 90;
public void setBeats(int beats){
this.beats = beats;
}
public int getBeats(){
return beats;
}
//在内部类中,可以直接访问外部类的成员
public void print(){
System.out.println("姓名为:" + name + "心跳的次数为:" + beats);
}
}
public void show(){
System.out.println("Body类的方法");
//在外部类中,需要创建内部类对象访问内部类成员
Heart h = new Heart();
System.out.println(h.getBeats());
}
}
代码
package demos4;
import demos01.B;
public class Demo02 {
public static void main(String[] args) {
//不能直接访问私有内部类
// Body2.Shen bs = new Body2().new Shen();
Body2 b = new Body2();
//只能使用外部类提供的公共访问方式,间接访问
b.zouShen();
}
}
class Body2{
String name = "张三";
//定义一个私有的成员内部类
private class Shen{
int age = 30;
//在私有的成员内部类中,可以直接访问外部类成员
public void show(){
System.out.println("姓名为:" + name + ",肾脏的年龄为:" + age +",兄弟,该走心的时候别TM来找我");
}
}
//在外部类中,给私有的内部类提供一个公共访问方式
public void zouShen(){
Shen s = new Shen();
System.out.println(s.age);
s.show();
}
}
package demos4;
public class Demo03 {
public static void main(String[] args) {
Body3 b = new Body3();
System.out.println(b.name);
System.out.println(Body3.age);
//在其他类中,访问静态内部类的非静态成员,不需要创建外部类对象,只需要创建内部类对象
Body3.Fei bf = new Body3.Fei();
bf.show();
}
}
class Body3{
String name = "张三";
static int age = 23;
//在类中定义一个静态内部类
static class Fei{
String color = "黑色";
//在静态内部类中,不能直接访问外部类非静态成员,需要使用对象访问
//可以直接访问外部类静态成员
public void show(){
System.out.println("姓名为:" + new Body3().name + ",年龄为:" + age + ",肺脏的颜色为:" + color
+ ",大哥,少抽点吧,我都成什么色儿,还抽呢");
}
}
//在外部类中,访问静态内部类的非静态成员,需要创建对象
public void print(){
Fei f = new Fei();
f.show();
}
}
package demos4;
public class Demo04 {
public static void main(String[] args) {
show();
}
public static void show(){
String name = "张三";
//局部内部类
class Gan{
String color = "黑色";
public void print(){
System.out.println("姓名为:" + name + ",肝脏的颜色为:" + color);
}
}
Gan g = new Gan();
g.print();
}
}