java的内部类
2015-08-23 11:12
567 查看
内部类:
静态内部类:
静态内部内的访问修饰符可以使default private protect public,
一般情况下:内部类值服务于外部类通常会定义为 private
public class Demo1 {
//静态内部类
private static class Demo2{
public static void Test(){
}
}
public static void main(String[] args) {
Demo2 c = new Demo1.Demo2();//推荐这种方式创建内部类的对象
Demo2 c2 = new Demo2();
c2.Test();
}
}
成员内部类:
内部类的方法不能声明为静态的方法,除非成员内部内本身被static修饰(这样的话又是静态内部类)
public class Demo2 {
public static void main(String[] args) {
Demo2 demo = new Demo2();
Demo2.B b =new Demo2().new B();
b.Test();
}
class B {
int a =3;
public void Test(){
System.out.println();
}
}
}
方法内部类:
只能在声明的方法中可见,并且不能使用访问修饰符修饰
方法的内部类中只能定义非静态的成员
不能使用所在方法的局部变量,除非是常量(因为方法的生命周期和方法内部咧的生命周期又可以不一致)
public class Demo3 {
public static void main(String[] args) {
}
public static void Test(){
int b =8;//不能被get方法使用
class A {
private int a =0;
private void get(){
System.out.println("我是方法内部类的方法");
}
}
A a = new A();
a.get();
}
}
匿名内部类:其实也是方法内部类,仅限用一次的时候使用
public class Demo4 {
public static void main(String[] args) {
//接口式
Runnable run = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
};
//继承式
Car car = new Car(){
@Override
public void run() {
System.out.println("子类的run");
}
};
Test2(new Car(){
@Override
public void run() {
System.out.println("参数式的run");
}
});
}
public static void test2(Car car ){
}
calss Car {
public void run(){
System.out.println("父类")
}
}
}
通用的规范:静态的方法中不能直接使用非定态的属性或者方法;在非静态的方法中可以使用静态或者非静态的属性和方法;
这和java本身类的加载机制是有 关系的;
静态的方法或者属性在类加载的时候同时就已经初始化完成。所以可以供类直接使用.
java类的访问修饰符:
private 访问权限:本类
default:如果不声明访问修饰符,默认的就是default,访问权限是包 和 类
protect 包 类 子类
public 所有的都可以访问
静态内部类:
静态内部内的访问修饰符可以使default private protect public,
一般情况下:内部类值服务于外部类通常会定义为 private
public class Demo1 {
//静态内部类
private static class Demo2{
public static void Test(){
}
}
public static void main(String[] args) {
Demo2 c = new Demo1.Demo2();//推荐这种方式创建内部类的对象
Demo2 c2 = new Demo2();
c2.Test();
}
}
成员内部类:
内部类的方法不能声明为静态的方法,除非成员内部内本身被static修饰(这样的话又是静态内部类)
public class Demo2 {
public static void main(String[] args) {
Demo2 demo = new Demo2();
Demo2.B b =new Demo2().new B();
b.Test();
}
class B {
int a =3;
public void Test(){
System.out.println();
}
}
}
方法内部类:
只能在声明的方法中可见,并且不能使用访问修饰符修饰
方法的内部类中只能定义非静态的成员
不能使用所在方法的局部变量,除非是常量(因为方法的生命周期和方法内部咧的生命周期又可以不一致)
public class Demo3 {
public static void main(String[] args) {
}
public static void Test(){
int b =8;//不能被get方法使用
class A {
private int a =0;
private void get(){
System.out.println("我是方法内部类的方法");
}
}
A a = new A();
a.get();
}
}
匿名内部类:其实也是方法内部类,仅限用一次的时候使用
public class Demo4 {
public static void main(String[] args) {
//接口式
Runnable run = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
};
//继承式
Car car = new Car(){
@Override
public void run() {
System.out.println("子类的run");
}
};
Test2(new Car(){
@Override
public void run() {
System.out.println("参数式的run");
}
});
}
public static void test2(Car car ){
}
calss Car {
public void run(){
System.out.println("父类")
}
}
}
通用的规范:静态的方法中不能直接使用非定态的属性或者方法;在非静态的方法中可以使用静态或者非静态的属性和方法;
这和java本身类的加载机制是有 关系的;
静态的方法或者属性在类加载的时候同时就已经初始化完成。所以可以供类直接使用.
java类的访问修饰符:
private 访问权限:本类
default:如果不声明访问修饰符,默认的就是default,访问权限是包 和 类
protect 包 类 子类
public 所有的都可以访问
相关文章推荐
- java-多线程5-线程组
- struts2 中action 跳转问题 同一个package、不同package
- [leetcode-169]Majority Element(java)
- JDK动态代理
- Struts2学习(四)利用ajax异步上传
- Eclipse(自带的插件) 连接数据库
- java-多线程4
- java学习笔记7
- 构建JDK8报错了,哪位大神能帮忙看下什么原因 ?
- java的static方法并发问题
- Java的自动装箱,拆箱
- Java记录 -9- 面向对象之封装
- JAVA内部类、多态、final的联系
- Java反射
- Android(java)学习笔记189:eclipse 导入项目是提示:某些项目因位于工作空间目录中而被隐藏。
- Java编程Tips
- Java之旅hibernate(2)——目录结构
- 【java基础学习-2--】关于Hashcode()的使用
- FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT
- struts 2 标签 总结