本人新手,写下自己的学习心得,给以后的我看 ,如果有什么错误,请大神指出来
定义:内部类是指在一个外部类的内部再定义一个类。
内部类分为:
1.成员内部类
2.局部内部类(方法内部类)
3.静态内部类(静态嵌套类)
4.匿名内部类
在这之前先说明:
优点:在于方便的访问外部类中的私有成员
缺点:程序结构混乱
使用内部类最吸引人的原因是:
开始讲解
(讲解一下成员变量和局部变量来区分一下成员和局部的不同之处
package com.liyangjr.inner;
public class InnerMethod {
String name1 = "我是成员变量的值";// 成员属性
public void Test() { // 成员方法
String name1 = "我是局部变量的值";
}
}
理解一下什么叫成员(全局),什么叫局部)
了解一下
1.成员内部类
2.局部内部类
3.静态内部类
4.匿名内部类
下面是实例
public class Outer extends Object {
String outerName;//成员属性
//成员内部类 ---------->成员内部类的编译成Outer$Inner.class
public class Inner extends Object{
}
//静态内部类
public static class Inner1{
}
public void outerMethod()
{
//局部内部类//内部类 方法内部类
class InnerMethod{
}
}
//定义接口
public interface PCI {
public void start();
}
//匿名的内部类
PCI p=new PCI() {
@Override
public void start() {
}
};
}
---------->成员内部类的编译成Outer$Inner.class
---------->局部内部类被编译成Outer$1Inner.class(注意1)
1.成员内部类
还是用代码来显示
package com.liyangjr.memberclass;
public class Outer {
String name;
int age;
public void outerMethod() {
System.out.println("outerMethod进入成功");// 外部类访问内部类的属性,需在先产生对象.属性方式来访问
Inner i = new Inner();
i.name = "成员内部类中的属性";
System.out.println(i.name);
}
// 内部类 //成员内部类
public class Inner {
String name;
public void innerMehtod() {
name = "inner";// 成员内部类中的属性
this.name = "inner";// 成员内部类中的属性
Outer.this.name = "outer";// 外部类的属性
age = 12;
System.out.println(this.name+","+age);
}
}
}
测试类
package com.liyangjr.memberclass;
import com.liyangjr.memberclass.Outer.Inner;
public class Test {
public static void main(String[] args) {
// Outer o = new Outer();
// Outer.Inner inner = o.new Inner();
// inner.innerMehtod();
Outer.Inner inn =new Outer().new Inner();//简化
inn.innerMehtod();
}
}
结果 inner,12
2.局部内部类
方法内的局部内部类,它就是为这个方法来提供功能的。
package com.liyangjr.localclass;
public class Outer {
String outerName;
public void outerMethod() {
// 方法内的局部内部类,它就是为这个方法来提供功能的。
// 所以,它的调用,就是在方法内完成调用
// 方法中变量,即局部变量
final int methodVar = 123;
// 内部类 方法内部类,局部内部类
class InnerMethod {
String outerName;
public void innerMethod() {
// methodVar=1;
System.out.println(methodVar);
outerName = "123";
Outer.this.outerName = "123";
System.out.println("innerMethod");
}
}
// 在这里完成调用的
InnerMethod im = new InnerMethod();
im.innerMethod();
}
}
测试
package com.liyangjr.localclass;
public class Test {
public static void main(String[] args) {
Outer o =new Outer();
o.outerMethod();
}
}
3.静态内部类(
嵌套类 )
static的内部类就叫做嵌套类
另外,嵌套类还有特殊之处,就是嵌套类中可以有static方法,static字段与嵌套类,而普通内部类中不能有这些。
package com.liyangjr.staticclass;
public class Outer{
String sex;
static String address;
//成员方法
public void outerMethod()
{
Inner.name="";
Inner i=new Inner();
i.age=2;
}
//静态内部类
public static class Inner{
static String name;
int age;
public void innerMethod() {
// Outer.this.sex="女"; //错误
Outer.address = "静态内部类的innerMethod"; // 只能操作外部类的static 变量
System.out.println(Outer.address);
}
}
}
测试
package com.liyangjr.staticclass;
public class Test {
public static void main(String[] args) {
Outer.Inner inner = new Outer.Inner();
inner.innerMethod();
}
}
4.匿名内部类
还没有搞清楚 ,明天继续