/*
* 内部类访问规则:I-O内部类可直接访问外部类的所有成员;O-I外部类要访问内部必须建立内部类对象;
* 内部类中定义了静态成员,该内部类必须是static;
* 外部类的静态方法访问内部类时,内部类必须是静态的;
* 描述事物时,事物内还有事物,就用内部类;因为内部类“直接”使用外部类的内容;内部类最好private
* class human{
* private class heart{
*
* }
* }
*
*
* */
class Outer{
static private int a=3;
static class Inner//可以被private,public(封装)static(静态内部类,只能访问外部的静态成员,出现访问限制)
{
static public int b=4;
public void function()
{
System.out.println("lalala"+Outer.a);//之所以可以直接访问外部类的成员,因为内部类中持有一个外部类的引用,该引用写法是(外部类.this.)
}
public static void function1()
{
System.out.println("lalala"+Outer.a+1);
}
}
static class Inner2{
public void function2()
{
System.out.println("lalala"+Outer.a+2);
}
}
public static void visit(){
Inner in=new Inner();//外部访问内部必须先建立内部的对象;
in.function();
}
public static void run(){//外部类的静态方法访问内部类时,内部类必须是静态的;run(static)-Inner2(static)
new Inner2().function2();
}
}
class Outer1{
//public String c="Outer1";
public void run(){
final int x=4;//1.7及以下版本声明final会报错(内部类访问局部变量)
class Inner3//Inner3在局部,不能再被public/private/static修饰;
{
//String c="Inner3";
public void ge()//局部时内部不能有static成员,否则外部必须要有static,而static只能出现在成员前,故不可出现静态成员;
{
System.out.println(x);
}
}
/*
* Inner3 i3=new Inner3();
i3.ge();
*/
new Inner3().ge();//一回事
}
}
//----------------------------------------------------------------------------
public class InerClass {
public static void main(String[] args) {
/*
Outer.Inner ii=new Outer().new Inner();
ii.function();
*/
/*
new Outer.Inner().function();//访问静态内部类的非静态成员,必须要new一个该函数直属的类;
Outer.Inner.function1();//静态内部类的静态成员
Outer.visit();
System.out.println(Outer.Inner.b);//访问静态内部类静态属性;
*/
//Outer.run();
new Outer1().run();
}
}
java_内部类
最新推荐文章于 2023-07-20 09:38:12 发布