Object类是所有类的基类,要注意使用equals()方法,默认比较地址。
---------------------------------------------------------------------------------------------------------------
内部类:
class Outer{
class Inner{ }
}
---------------------------------------------------------------------------------------------------------------
对于内部类:
1.可以直接访问外部类成员(包括private成员),内部类持有外部类的引用:Outer.this
2.外部类要访问内部类,必须建立内部类对象:Outer.Inner in=new Inner();
3.内部类可以被私有修饰
非私有内部类可以在外部其他类直接创建对象:
Outer.Inner in=new Outer().new Inner();
---------------------------------------------------------------------------------------------------------------
静态内部类:
内部类具有static特性
特点:只能直接访问外部类中的static成员,出现了访问权限
外部其他类访问static 内部类:
new Outer.Inner().function();
访问static方法:
Outer.Inner.function();
注意:当内部类中定义了静态成员,该内部类必须是静态的。
当外部类中静态方法访问内部类时,内部类也必须是静态的。
内部类定义在局部时,
1.不可以被成员修饰符修饰;
2.可以直接访问外部类中的成员,但不能访问它所在局部中的变量,只能访问final修饰的局部变量
method(){
final int x=3;
class{
sop(x);
}
}
---------------------------------------------------------------------------------------------------------------
内部类定义原则:
当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物
在使用外部事物的内容
---------------------------------------------------------------------------------------------------------------
匿名内部类:
class Outer{
class{}
}
---------------------------------------------------------------------------------------------------------------
定义前提:内部类必须继承一个类/接口
abstract clas AbsDemo{
abstract void show();
}
class Outer{
new AbsDemo{ //对象:AbsDemo子类对象(简化书写,覆盖方法)
void show(){
sop(...);
}
}.show();//调用show()
}
匿名内部类定义的方法最好不要超过3个;
无意义的使用方式:
AbsDemo d=new AbsDemo(){ };
虽有多态的味道,但d中无法调用父类未定义的方法,只能是用父类方法;
---------------------------------------------------------------------------------------------------------------
如何理解Test.function().method():
可直接使用Test.function(),则该function()为Test的静态方法
后调用method(),可见Test function()返回的是一个对象
则有两种可能,function()内组合了其他外部类,或者内部使用了匿名内部类
此处研究匿名内部类:代码如下:
interface Inter{ public void method();}
class Test{
public Inter function(){
return new Inter(){
public void method{...};
}
}