成员内部类
1.成员内部类位于一个类内部的成员位置,可以访问外部类中私有化的变量,方法等。
2.成员内部类可以被私有化或者静态,静态内部类只能访问外部类中静态的成员。私有化封装的内部类只能通过外部类的成员访问。具体知识点用代码演示。
package 面向对象;
//成员内部类。
class Person
{
int a=6;
class Hand
{
int a=5;
public void test_1()
{
int a=4;
System.out.println(Person.this.a);//外部类变量用类名.this修饰。
System.out.println(this.a);//内部类变量用this修饰。
System.out.println(a);//内部类的方法内的变量不用修饰。
}
}
}
public class Test_5
{
public static void main(String[] args)
{
Person.Hand c= new Person(). new Hand();//注意直接创建内部类对象的格式。
//如果内部类为静态则创建方式为:Person.Hand c=new Person. Hand();
c.test_1();
}
}
局部内部类
局部内部类一般位于外部类的成员方法中。局部内部类不能私有化和静态化。具体知识点如下:
package 面向对象;
//局部内部类。
class Outer
{
private int a=5;
public void run()
{
class Inner//局部内部类不能用static,private修饰。
{
//final int c=30 //局部内部类使用局部变量必须加final。(jdk8以前)
public void run_1(final int c)
{
System.out.println(Outer.this.a);
System.out.println(c);
}
}
Inner i=new Inner();//局部内部类完成后需要创建对象。
i.run_1(30);
}
}
public class InnerTest
{
public static void main(String[] args)
{
Outer o=new Outer();
o.run();
}
}
匿名内部类
使用匿名内部类我们必须要继承一个父类或者实现一个接口,当然也仅能只继承一个父类或者实现一个接口。同时它也是没有class关键字,这是因为匿名内部类是直接使用new来生成一个对象的引用。
具体知识点如下
package 面向对象;
interface Inter
{
public abstract void method();
}
class Test_6
{
public static Inter function()
{
return new Inter()//这里的内部类实现了inter接口,重写了method方法。
{
public void method()
{
System.out.println("haha");
}
};
}
}
public class InnerClassTest
{
public static void main(String[] args)
{
Test_6.function().method();
}
}
