现在的位置: 首页 > 综合 > 正文

Java基础学习笔记_内部类

2014年03月05日 ⁄ 综合 ⁄ 共 1083字 ⁄ 字号 评论关闭
1、Object类介绍(基类)
在对一个对象的引用进行打印输出时,即使不打印toString方法,系统也会默认加上;
数组也是Object的子类
重写Object里的toString方法可以自己定义能看懂的结果
Object类中常用方法
equals();
toString();
hashCode(); //对象的哈希地址值
getClass(); //返回运行时类
finalize(); //当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法,System.gc()
调用垃圾回收的方法。
2. 内部类
class Outer{
class Inner{
public void show(){
System.out.println("hello world");
}
}
}
调用方式1:new Outer().new Inner().show();
调用方式2:Outer.Inner oi = new Outer().new Inner();
oi.show();
访问特点:
1)内部类可以直接访问外部类的成员,包括私有成员;
2)外部类要访问内部类的成员必须要建立内部类的对象。
内部类的位置:
1)定义在成员位置:
可以被private、static 修饰;
static修饰的内部类成员只能访问外部类中的静态成员。
2)定义在局部位置
也可以直接访问外部类中的成员;
同时可以访问所在局部中被final修饰的局部变量。
注意:
内部类中定义了静态成员,该内部类必须是static 的;
当外部类的静态方法访问内部类时,内部类也必须是静态的。
内部类好处:
一个外部类里头可以有多个内部类,而这多个内部类可以继承不同的类,打破了单继承的局限性。
易错题:
1)
public void show(){
new Object(){
void method(){
System.out.println("method run");
}
}.method(); //程序正常执行,method为Object子类对象的特有方法,子类对象可以直接调用。
}
2)
public void show(){
Object obj = new Object(){
void method(){
System.out.println("method run");
}
}
obj.method(); //错误,method是子类特有的方法,父类对象不能直接调用子类的特有方法。
}
建立匿名内部类的关键点是重写父类的一个或者多个方法,强调一下是重写父类的方法。
如果要给匿名内部类对象起名字只能是父类的引用指向子类对象,因为用父类的引用不可能调用父类本身没有的方法,
如果想调用子类特有的方法要用匿名内部类对象调用->参考多态

抱歉!评论已关闭.