码迷,mamicode.com
首页 > 其他好文 > 详细

内部类,实际开发中的应用体现

时间:2015-05-20 20:18:52      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

定义:放在一个类的内部的类我们就叫内部类。

  在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。

  内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。所以内部类的成员变量/方法名可以和外部类的相同。

  内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default

分类:1.成员内部类  2.静态内部类 3.匿名内部类 4.方法内部类(几乎不用)

作用:间接解决多重继承的问题(内部类继承一个类,外部类继承一个类,实现多继承。最重要的作用);


 

  成员内部类,顾名思义,就是在一个类的内部定义一个类,作为类的一个成员属性(成员字段),类的成员内部类可以访问该类的属性和方法,因为他也是该类的一个成员。

  要注意的是,成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的,了解这一点,就可以明白更多事情,在此省略更多的细节了。

  上代码:

  

package 内部类.成员内部类;

public class Person {
	public void sayPerson(){
		System.out.println("hello Person");
	}
}

  

package 内部类.成员内部类;

public class Student extends Person {
	private int age;
	public int getAge(){
		return age;
	}
	public void say(){
		System.out.println("hello Student");
	}
	
	private Grade1 getGrade1() { 
        return new Grade1(); //建议用这种方式实例化
    } 
	
    private class Grade1{
		public void say(){
			Student.this.sayPerson();
			Student.this.say();
			System.out.println(Student.this.getAge());
			System.out.println("hello Grade1");
		}
	}
	public static void main(String[] args) {
		Student stu = new Student();
		Student.Grade1 grade1 = stu.getGrade1();
		//Student.Grade1 grade2 = stu.new Grade1();两种实例化内部类的方式
		grade1.say();
		
	}
}

 


静态内部类:顾名思义内部类是静态的,这样的好处是不用拿到外部类对象就可以实例化内部类了,但是这样的话,内部类就不能引用外部类的静态成员了(人无完人啊)

上代码 

package 内部类.静态内部类;

public class Test {  
    public int age=1;  
    public static String name="shaolin";  
    static class Baby{  //静态内部类
        public void say()  
        {  
        	//System.out.println(age);不能访问age属性,只能访问静态属性(很容易理解)
            System.out.println("hello "+name);  
        }  
    }  
  
    public static void main(String[] args) {      
    	Test.Baby temp=new Test.Baby();  //实例化静态内部类  
        temp.say();  
    }  
}  
 

  


 

匿名内部类,顾名思义就是没有名字的内部类(回家再写)

内部类,实际开发中的应用体现

标签:

原文地址:http://www.cnblogs.com/amazinglin/p/4517825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!