直接看代码吧
package com.hiyo.Class;
/**
*内部类的简单说明
*Author:hiyo585
* Company:hiyo design studios
* 在Outer类的内部定义一个Inner类,则Inner类称为内部类
* Outer类称为外部类。
* 内部类可以声明为public或private,访问方法和成员变量和
* 成员方法完全相同。
* * */
class Outer {
private String info = "外部类的private属性";
//System.out.println("Hello");错误,
//调用println()方法不是类中定义的方法,会出错误。
//Java为面向对象语言,不允许耽搁的语句在类中出现。
/*
class A {//成员变量;//构造方法;//普通方法;//内部类;}
在类里面最多只能有这些
上面的代码加上打括号,让这句话变成普通块,或者静态普通块,
这些也属于普通方法。
*/
//每次实例化都会执行构造块中的代码
//但是静态代码块中的代码只执行一次。
static{System.out.println("静态构造代码块中的代码");}//静态构造块
{System.out.println("构造代码块中的代码");}//构造块
//内部类的定义方法
class Inner {
private int age = 30 ;
public void print() {
System.out.println(info);//访问外部类的私有属性
//这里是直接访问,info,不需要外部类实例化。
}
};
public void fun() {
new Inner().print(); //通过内部类对象调用方法。
}
public void outPrint() {
System.out.println(new Inner().age);
//外部类访问内部类的私有属性
//需要实例化内部类,并访问私有属性
}
//static定义的内部类,称为外部类
//使用static定义的内部类称为外部类,使用static声明的
//内部类不能访问非static的外部类属性
static class Inner2 {
public void print(){
// System.out.println(info);无法访问非static属性
System.out.println("static内部类的方法");
}
}
//在方法中也可以定义内部类
public void fun(int temp){
class Inner3 {
public void print(){
System.out.println("外部类中的属性" + info);
System.out.println("方法中的参数"+ temp ) ;
}
}
new Inner3().print();
}
}
public class InnClass {
public static void main(String[] args) {
new Outer().fun();
new Outer().fun();
new Outer().outPrint();
new Outer.Inner2().print();
//外部访问内部类
//外部类.内部类 内部类对象 = 外部类实例.new 内部类();
Outer out = new Outer() ;
Outer.Inner in = out.new Inner() ;
in.print();
out.fun(30);
}
}
/*
静态构造代码块中的代码
构造代码块中的代码
外部类的private属性
构造代码块中的代码
外部类的private属性
构造代码块中的代码
30
static内部类的方法
构造代码块中的代码
外部类的private属性
外部类中的属性外部类的private属性
方法中的参数30
*/