黑马程序员技术交流社区
标题:
Java基础学习日记 - 内部类
[打印本页]
作者:
qihuan
时间:
2015-7-5 12:19
标题:
Java基础学习日记 - 内部类
package practice;
/**
* 内部类
* 概念:将一个类定义在另一个类的里面,对里面的类就称为内部类。
*
* 访问特点: 1.内部类可以直接访问外部类中的成员,包括私有成员。
* 之所以可以直接访问外部类的成员,是因为内部类中有一个外部类的引用(外部类名.this)
* 2.外部类要访问内部类的成员必须建立内部类的对象。
*
* Tips: 1.当内部类中定义了静态成员,则该内部类必须是静态的。
* 2.当外部类中的静态方法访问内部类时,内部类必须是静态的。
* 3.内部类定义在局部时,不可以被成员修饰符修饰;可以直接访问外部类中的成员,
* 但是不可以访问它所在的局部中的变量,除非用final修饰。
*
* 其他知识点:
* 匿名内部类:
* 1.是内部类的简写格式。
* 2.定义匿名内部类的前提:内部类必须是继承一个类或实现接口。
* 3.匿名内部类的格式:new 父类或者是接口(){定义子类的内容}
* 4.匿名内部类就是一个匿名子类对象。
* 5.匿名内部类中定义的方法最好不要超过3个。
* @author Qihuan
*
*/
class Outer {
private static int NUM = 1;
static class Inner {
// int num = 2;
private static void iFun() {
// int num = 3;
// System.out.println("Inner:"+Outer.this.NUM);
// System.out.println("Inner:"+this.num);
System.out.println("Inner:"+NUM);
}
}
public void showInner() {
new Outer.Inner();
Inner.iFun();
}
void oFun() {
System.out.println("Outer:"+NUM);
Inner.iFun();
}
}
public class InnerClassPractice {
public static void main(String[] args) {
// Outer o = new Outer();
// o.oFun();
// //直接访问内部类中的成员。
// Outer.Inner oi = new Outer().new Inner();
// oi.iFun();
// //直接访问静态内部类中的非静态成员
// new Outer.Inner().iFun();
// //直接访问静态内部类中的静态成员
// Outer.Inner.iFun();
new Outer().showInner();
}
}
复制代码
package practice;
/**
* 练习:
* 1.通过匿名内部类补足代码
* Test.function().method();
* 分析:Test类中有一个静态的方法:function。
* .method():function这个方法运算后结果是一个对象。
* 而且是一个Inter类型的对象。
* 因为只有是Inter类型的对象才可以调用method方法。
*
* 2.若没有定义父类或接口,怎么实现匿名内部类?
* 通过Object类来实现。
* @author Qihuan
*
*/
interface Inter{
void method();
}
class Test{
//通过匿名内部类补足代码
// static class Inner implements Inter{
// public void method() {
// System.out.println("hello");
// }
// }
static Inter function(){
// return new Inner();
return new Inter(){
public void method(){
System.out.println("匿名内部类练习1");
}
};
}
}
class InnerClassTest{
public static void main(String[] args) {
Test.function().method();
//分析:Test类中有一个静态的方法:function。
//.method():function这个方法运算后结果是一个对象。而且是一个Inter类型的对象。
//因为只有是Inter类型的对象才可以调用method方法。
//练习2、
new Object() {
public void function(){
System.out.println("匿名内部类练习2");
}
}.function();
}
}
复制代码
作者:
325122062q
时间:
2015-7-5 12:35
谢谢了 我先收藏了
作者:
宝马X6
时间:
2015-7-5 13:40
写的不错
作者:
wengjialiang
时间:
2015-7-5 15:39
谢谢了 我先收藏了
作者:
小方的sunshine
时间:
2015-7-5 16:13
内部类重点 一定收藏
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2