Java中内部类
我的:
1.四种:
成员内部类,局部内部类,静态内部类,匿名内部类
成员内部类:
class Outer{
System.out.println(“外部类”);
class Inter{
System.out.println(“内部类”);
}
}
public class Example{
public static void main(String[] args){
Outer out=new Outer();
Outer.Inter inner=out.new Inter();
}
}
方法或代码块中定义一个类 局部内部类
class Outer{
void test(){
class Inner{
System.out.println(“hhhh”);
}
}
}
public class hh{
Outer inner=new Outer();
}
匿名内部类
格式: new 父接口(){
}
列:
interface animal{
void show();
}
public void hh1{
public static void main(String[] args){
String name=“小明”;
animalShow(new Animal(){
public void shout(){
System.out.println(name+“是狗”);
}
}
}
public static void animalShow(animal an) {
an.shout();
}
}
老师的:
1、内部类
方法内部不能定义方法,方法只能调用方法。
类的内部可以定义一个类。外面的类外部类,里面的类就是一个内部类。
内部类主要是为外部类服务的。
位置来分
类的内部定义一个类 成员内部类
方法或代码块中定义一个类 局部内部类
匿名内部类
类中可以定义属性和方法的,访问修饰符+static
成员内部类:访问修饰符有四个。外部类【类】访问修饰符有俩
在成员内部类中可以定义属性,方法,构造方法,代码块。就是具有类的特点
1>静态内部类:
2>非静态内部类:
一般类[外部类],访问修饰符有哪些呢?【public 默认的】
内部类访问修饰符,同属性访问修饰符一样。【private 默认 protected public】
非静态内部类的特点:在非静态内部类中不能定义static修饰的属性,方法,代码块。
在非静态内部类中可以调用外部类的属性,方法。
在非静态内部类的方法中可以调用外部类的属性,方法,满足就近原则。
如果出现同名?怎么区分? 外部类的属性或方法 外部类的名.this.属性|方法();
可以访问外部类static修饰的属性或方法吗?可以的
如何调用非静态内部的属性或方法呢?
1)在外部类的中进行? 外部类非静态方法: 直接创建内部类的对象,然后通过对象进行调用属性或方法
外部类静态方法: 创建外部类的对象,
再根据 外部类对象.new 内部类() 语法创建内部类对象
通过内部类对象调用属性和方法
2)在其他的类中如何调用?创建外部类的对象,
再根据 外部类对象.new 内部类() 语法创建内部类对象
通过内部类对象调用属性和方法
静态内部类:static修饰的,可以再静态内部类中使用static关键字来修饰属性和方法,以及代码块。
再静态内部类中,只能调用外部类中静态的属性和方法。在静态内部类中不能使用 外部类名.this
再静态内部类中不能使用this关键字?
错误的,再静态内部类中可以定义非静态的方法。可以再非静态方法中使用this关键字,调用该静态内部类中定义的非静态属性和方法。
但是不能使用 外部类.this
如果想调用静态内部类中的属性和方法:
如果是静态成员,可以直接通过 静态内部类名. 进行调用, 如果再其他类中可以通过 外部类.内部类.静态成员
如果是非静态成员,必须得创建静态内部类的对象 通过对象名. 进行调用 外部类.内部类 对象名 = new 外部类.内部类();
注意:内部类可以创建对象也是因为在内部类中有构造方法。如果显示添加带参构造方法,new对象的时候,必须传递参数。