黑马程序员——java内部类学习笔记
2015-05-03 21:18
267 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------
内部类
内部类的定义:简单来说就是将一个类定义在另一个类的内部,内部类分为:匿名内部类、普通内部类、局部内部类
1、普通内部类:将类放在外围类里
普通内部类可以访问外部类的静态与非静态的方法和成员变量。
生成成员内部类对象的方法:
OuterClass.InnerClass inner = new OuterClass().new InnerClass();
在局部内部类中访问外部类的成员变量的方法:
OuterClass.this.a;
例: public class OuterClass
{
public class InnerClass{}
}
2、匿名内部类:特点-匿名内部类既可以扩展类,也可以实现接口,但不能两者兼备,如果实现接口,只能实现一个接口
使用匿名内部类的情况:只能实例初始化的情况下,实例初始化的实际效果就是构造器,并且仅有一个这样的构造器,并且仅有一个这样的构造器。
public class AnonyClass{
public static Base getBase(int i){
return new Base(i){
System.out.println("Inside instance initializer");
}
public void f(){
System.out.println("in ananymous f()");
}
};
}
Base base = AnonyClass.getBase(47) 输出结果:Inside instance initializer
base.f();输出结果:in ananymous f();
匿名内部类的例子
public class AnonymousInnerClass{
public Destination destination(final String dest,final float price){
return new Destination(){
private in cost;
private String label = dest;
{
cost = Math.round(price);
if(cost>100){
System.out.println("Over budget");
}
}
public String readLabel(){
return label;
}
};
}
} Destination()的参数必须是final的,因为他们是在匿名类内部使用的。
3、局部内部类
局部内部类的特点——不能有访问说明符,由于它不是外围类的一部分,但是它可以访问当前代码块的常量以及此外围类的的所有成员。
使用局部内部类的情况——当需要一个已命名的构造器或则重载的构造器的情况
class LocalInner{
public void f(){
final int a = 1;
class InnerClass{
public void f(){
System.out.println("LocalInnerClass");
//局部内部类只能访问final类型的变量
System.out.println(a);
} } }
new InnerClass.f();
}}
在main函数中的使用
public static void main(String[] args){
//外部类不能直接创建局部内部类
LocalInner localInner = new LocalInner();
localInner.f();
}
3、静态内部类最简单的内部类。
只能访问外部类的静态成员变量与静态方法。
生成静态内部类对象的方法:
OuterClass.InnerClass inner = new OuterClass.InnerClass();
例:class OuterClass{
private static int a = 1;
static class InnerClass{
private static int b = 2;
public void f(){
//只能访问静态的外部类成员
System.out.println(a+b);
};
}
}
实例化方式: OuterClass.InnerClass inner = new OuterClass().InnerClass();
-------
内部类
内部类的定义:简单来说就是将一个类定义在另一个类的内部,内部类分为:匿名内部类、普通内部类、局部内部类
1、普通内部类:将类放在外围类里
普通内部类可以访问外部类的静态与非静态的方法和成员变量。
生成成员内部类对象的方法:
OuterClass.InnerClass inner = new OuterClass().new InnerClass();
在局部内部类中访问外部类的成员变量的方法:
OuterClass.this.a;
例: public class OuterClass
{
public class InnerClass{}
}
2、匿名内部类:特点-匿名内部类既可以扩展类,也可以实现接口,但不能两者兼备,如果实现接口,只能实现一个接口
使用匿名内部类的情况:只能实例初始化的情况下,实例初始化的实际效果就是构造器,并且仅有一个这样的构造器,并且仅有一个这样的构造器。
public class AnonyClass{
public static Base getBase(int i){
return new Base(i){
System.out.println("Inside instance initializer");
}
public void f(){
System.out.println("in ananymous f()");
}
};
}
Base base = AnonyClass.getBase(47) 输出结果:Inside instance initializer
base.f();输出结果:in ananymous f();
匿名内部类的例子
public class AnonymousInnerClass{
public Destination destination(final String dest,final float price){
return new Destination(){
private in cost;
private String label = dest;
{
cost = Math.round(price);
if(cost>100){
System.out.println("Over budget");
}
}
public String readLabel(){
return label;
}
};
}
} Destination()的参数必须是final的,因为他们是在匿名类内部使用的。
3、局部内部类
局部内部类的特点——不能有访问说明符,由于它不是外围类的一部分,但是它可以访问当前代码块的常量以及此外围类的的所有成员。
使用局部内部类的情况——当需要一个已命名的构造器或则重载的构造器的情况
class LocalInner{
public void f(){
final int a = 1;
class InnerClass{
public void f(){
System.out.println("LocalInnerClass");
//局部内部类只能访问final类型的变量
System.out.println(a);
} } }
new InnerClass.f();
}}
在main函数中的使用
public static void main(String[] args){
//外部类不能直接创建局部内部类
LocalInner localInner = new LocalInner();
localInner.f();
}
3、静态内部类最简单的内部类。
只能访问外部类的静态成员变量与静态方法。
生成静态内部类对象的方法:
OuterClass.InnerClass inner = new OuterClass.InnerClass();
例:class OuterClass{
private static int a = 1;
static class InnerClass{
private static int b = 2;
public void f(){
//只能访问静态的外部类成员
System.out.println(a+b);
};
}
}
实例化方式: OuterClass.InnerClass inner = new OuterClass().InnerClass();
相关文章推荐
- 黑马程序员_java内部类之学习笔记
- 黑马程序员 - 学习笔记8 接口的初步了解
- 黑马程序员- IOS学习笔记-OC ARC、BLOCK、protocol
- 黑马程序员 学习笔记二:多线程之Runnable接口
- 黑马程序员_基础学习笔记(5)
- 黑马程序员_学习笔记17_Http协议拓展
- 黑马程序员--IOS_学习笔记_内存管理_@autorelease
- 黑马程序员-7-Objective-C学习笔记(OC对象深入认识)
- 黑马程序员---Java 学习笔记
- 黑马程序员----Java集合框架学习笔记1-List 与Set
- 黑马程序员--IOS_学习笔记_block和@protocol
- 黑马程序员----Java集合框架学习笔记2 Map-工具类-泛型
- 黑马程序员学习笔记之七(Java IO操作)
- 黑马程序员-IOS学习笔记 结构体的嵌套demo
- 黑马程序员学习笔记_OC之内存管理 2
- 黑马程序员之SQL学习笔记: 数据库相关知识 小总结
- 黑马程序员--------HTML学习笔记
- 黑马程序员—学习笔记4-PrintStream
- 黑马程序员--wpf学习笔记六----数据操作相关
- 黑马程序员---Java高新技术学习笔记(后篇)