package com.Lucky.oop;
public class OuterClass {
public static void main(String[] args) {
//调用外部类方法以及属性:
InnerClass inClass=new InnerClass();
inClass.Outer();
inClass.age=20;
System.out.println("外部类的age属性"+inClass.age);
//调用内部类方法以及属性[在普通内部类使用]: 外部类的实例.new 内部类();
//小知识:alt+enter :补全代码
InnerClass.inner inner=inClass.new inner();
inner.Inner();
inner.name="Lucky";
System.out.println("内部类的name属性"+inner.name);
System.out.println("------利用内部类调用外部类的方法以及属性------");
//利用内部类调用外部类的方法以及属性:
// 内部类的强大之处:能调用外部类的私有方法以及属性
inner.getOut();
System.out.println("---静态内部类-----");
////////////静态内部类////////////////
//调用内部类方法以及属性[在静态内部类使用]: new外部类.内部类()
InnerClass.inner1 inner1 = new InnerClass.inner1();
inner1.kao="静态内部类属性";
System.out.println(inner1.kao);
inner1.StaticIn();
inner1.tryOut();
System.out.println("---匿名内部类-----");
/*
匿名内部类:就是new一个没有名称的内部类实例
正常: InnerClass.inner inner=inClass.new inner();
现在:inClass.new inner()
*/
inClass.new inner().getOut();
new niming().add();
}
//匿名内部类实例:
static class niming{
int ggg;
public void add(){
System.out.println("kkkk");
}
}
}
1 package com.Lucky.oop;
2
3 public class InnerClass {
4 //外部类属性
5 public int age;
6 private String address;
7
8 public static void Outer(){
9 System.out.println("外部类方法");
10 }
11 private static void Outer1(){
12 System.out.println("外部类方法2");
13 }
14
15
16 //普通内部类
17 class inner{
18 //内部类属性
19 String name;
20
21 public void Inner(){
22 System.out.println("内部类方法");
23 }
24
25
26 ////////////////在内部类中可以调用外部类的私有[private]方法以及属性//////////////
27 public void getOut(){
28 System.out.println(age);
29 System.out.println(address); //私有属性
30 InnerClass.Outer();
31 InnerClass.Outer1(); //私有方法
32 }
33
34
35 }
36 //静态内部类
37 static class inner1{
38 //内部类属性
39 String kao;
40
41 public void StaticIn(){
42 System.out.println("静态内部类方法");
43 }
44
45
46 ////////在静态内部类中可以调用外部类的私有[private]方法以及属性【不带static不能调用】//////
47 public void getStatic(){
48 InnerClass.Outer();
49 InnerClass.Outer1(); //私有方法
50 }
51
52 public void tryOut(){
53 /*
54 在静态内部类,无法调用非静态属性
55 除非在属性加上修饰符static,[static是和类同时加载的,
56 不带有static修饰符的属性,会加载的慢,
57 所以就是说:存在的无法调用不存在的
58 ]
59 */
60 // System.out.println(age);
61 // System.out.println(address);
62 InnerClass.Outer();
63 InnerClass.Outer1(); //
64 }
65
66
67 }
68 }