Java基础学习笔记_内部类
2013-09-02 17:18
148 查看
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是子类特有的方法,父类对象不能直接调用子类的特有方法。
}
建立匿名内部类的关键点是重写父类的一个或者多个方法,强调一下是重写父类的方法。
如果要给匿名内部类对象起名字只能是父类的引用指向子类对象,因为用父类的引用不可能调用父类本身没有的方法,
如果想调用子类特有的方法要用匿名内部类对象调用->参考多态
在对一个对象的引用进行打印输出时,即使不打印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是子类特有的方法,父类对象不能直接调用子类的特有方法。
}
建立匿名内部类的关键点是重写父类的一个或者多个方法,强调一下是重写父类的方法。
如果要给匿名内部类对象起名字只能是父类的引用指向子类对象,因为用父类的引用不可能调用父类本身没有的方法,
如果想调用子类特有的方法要用匿名内部类对象调用->参考多态
相关文章推荐
- 黑马程序员 JAVA基础学习笔记 内部类等
- Java基础学习笔记10——(形参和返回值,包,导包,权限修饰符,常见修饰符,内部类)
- C\C++ 程序员从零开始学习Android - 个人学习笔记(八) - java基础 - 继承、抽象类、接口、内部类(待续)
- Java基础学习笔记十 Java基础语法之final、static、匿名对象、内部类
- 黑马程序员 Java基础学习笔记10 内部类
- 黑马程序员--Java基础学习笔记【参数传递、访问控制符、内部类】
- [学习笔记] Java核心技术 卷一:基础知识 接口、lambda表达式与内部类(三)
- java 从零开始,学习笔记之基础入门<内部类>(十四)
- Java入门基础_学习笔记[5]_接口与内部类
- C\C++ 程序员从零开始学习Android - 个人学习笔记(八) - java基础 - 继承、抽象类、接口、内部类(待续)
- 内部类--毕向东Java基础教程学习笔记
- 黑马程序员_毕向东_Java基础视频教程学习笔记(四)
- java 学习笔记基础
- Java基础学习笔记09——(final关键字,多态,抽象类,接口)
- Java基础学习笔记13——(StringBuffer的使用,数组高级,Arrays工具类,Integer和Character等包装类)
- [学习笔记]java方向需要了解的基础内容
- 做java程序员有一段时间了,但是感觉基础的东西了解的很少很少,我从现在开始从新开始。。。。。。。。。。。学习笔记(连载)给有需要的人
- Java基础学习笔记2-循环
- 【安卓学习笔记】JAVA基础Lesson1-简介与变量
- 黑马程序员_毕向东_Java基础视频教程学习笔记(七)