1 内部类分类
内部类分为:静态内部类;成员内部类;局部内部类;匿名内部类
1 书写代码要求
一:静态内部类
1:必须以static标椎
2:只可以访问类中静态的成员变量或静态方法
3:访问内部类格式应为 外部类.类名 名= new 外部类.类名;(不能直接实例内部类)
二:成员内部类
1:定义在一个类内部,无需static修饰
2:生成列方法:外部类.方法名 名= new 外部类.方法名
3:外部变量引用 :外部类.this.变量名
4:可以访问外部类的静态与非静态方法
三:局部内部类
1:局部内部类指的是定义在一个方法中的类
2:只有在当前的方法中对局部类中方法和变量访问
3:局部内部类只能访问其所在方法的final类型变量
四:匿名内部类
隐式的继承一个父类或是实现某个接口
2
静态内部类
public class StaticlnnerClassDemo {
public static void main(String[] args) {
//实例化外部类。
Foo foo = new Foo();
//如何实例化内部类
Koo koo = new Foo.Koo();
System.out.println(koo.b);
koo.show();
}
}
class Foo{
private static int a = 10;
//内部类
static class Koo{
public int b = 20;
public void show(){
System.out.println("hello"+a);//能访问外部静态变量
}
}
}
成员内部类
public class InnerClassDemo {
public static void main(String[] args) {
}
}
//外部类
class Joo{
private int a = 10;
class Noo{
public int b = 20;
public void show(){
System.out.println(a+b);
}
}
public void show(){
Noo noo = new Noo();
System.out.println(noo.b);
}
}
局部内部类
public class LocalInnerClass {
public static void main(String[] args) {
int a = 20;
class Hoo{
int b = 20;
public void show() {
System.out.println(b+a);
// System.out.println(a++);//内部类允许访问外部的局部变量,但不能改变气质。
}
}
Hoo hoo = new Hoo();
hoo.show();
}
}
匿名内部类
public class AnolnnerClassDemo {
public static void main(String[] args) {
//实例化匿名匿名内部类
Aoo aoo = new Aoo(){
public void show(){
System.out.println("love");
}
};
//匿名内部类,重写抽象类方法
new Coo() {
@Override
public void getCoo() {
System.out.println("重写接口中的方法");
}
}.getCoo();
//匿名内部类获取实列
Doo doo = new Doo() {
@Override
public void getDoo() {
}
};
doo.getDoo();
}
}
//普通类
class Aoo{
public int a =10;
public void show() {
System.out.println(a);
}
}
//子类继承父类
class Boo extends Aoo{
public void show() {
System.out.println("love");
}
}
//抽象类
abstract class Coo{
public abstract void getCoo();
}
//接口
interface Doo{
public abstract void getDoo();
}