Java中内部类的编写
来源:互联网 发布:stc90c52rc单片机容量 编辑:程序博客网 时间:2024/05/21 17:33
Java中内部类的编写
内部类的相关知识点:
1) 在一个类中定义另外一个类,这个类就叫做内部类或内置类 (inner class) 。
2) 内部类可以让我们将逻辑上相关的一组类组织起来,并由外部类(outer class)来控制内部类的可见性。内部类可以访问外部类的任何类型的方法和成员变量。
3) 当我们建立一个inner class时,其对象就拥有了与外部类对象之间的一种关系,这是通过一个特殊的this reference形成的,使得内部类对象可以随意的访问外部类中所有的成员。
下面为内部类的简单实现:
class Outer{
private int index=100;
void print() {
Inner i=new Inner();
i.print();
}
class Inner{
void print(){
System.out.println(index);
}
}
}
class Test{
public static void main(String[] args){
Outer o=new Outer();
o.print();
Outer.Inner inner=outer.getinner();
inner.print();
}
}
1) 在方法中定义的内部类,如果要访问方法中定义的本地变量或方法的参数,则变量必须被声明final。
2) 内部类可以声明为private或protected;还可以声明为abstract或final。
3) 内部类可以声明为static的,但此时就不能再使用外部类的非static的成员变量和非static的成员方法;
4) 非static的内部类中的成员不能声明为static的,只有在顶层类或static的内部类中才可声明static成员。
我们为什么使用内部类
1、在内部类(inner class)中,可以随意的访问外部类的成员,这可以让我们更好地组织管理我们的代码,增强代码的可读性。
2、内部类可以用于创建适配器类,适配器类是用于实现接口的类。使用内部类来实现接口,可以更好地定位与接口关联的方法在代码中的位置。
3、内部类的更多用法:见下面代码
下面为通过内部类来实现接口的简单代码:
interface Animal
{
void eat();
void sleep();
}
class Zoo
{
private class Tiger implements Animal//通过内部类Tiger来实现Animal接口,并且声明为private.从而可以隐藏接口内部的具体实现
{
public void eat()
{
System.out.println("tiger eat");
}
public void sleep()
{
System.out.println("tiger sleep");
}
}
Tiger gettiger()
{
return new Tiger();
}
}
class Test
{
public static void main(String []args)
{
Zoo zoo =new Zoo();
Animal an=zoo.gettiger();
an.eat();
an.sleep();
}
}
下面通过内部类来解决同时实现继承和接口,但是要继承的类中的方法名和接口中的方法名是一样的,此时可以通过内部类来实现接口中的方法,达到区分同名方法的目的:
interface Machine
{
void run();
}
class Person
{
void run()
{
System.out.println("people are running");
}
}
class Robet extends Person//实现继承
{
private class MachineStart implements Machine//
{
public void run()
{
System.out.println("machine started");
}
}
MachineStart getmachine()
{
return new MachineStart();
}
}
class Test
{
public static void main(String []args)
{
Robet robet=new Robet();
Machine machine=robet.getmachine();
machine.run();
robet.run();
}
}
- Java中内部类的编写
- java 中内部类
- java中内部类
- Java中内部类
- java中内部类
- java中内部类
- Java中内部类
- Java中内部类
- Java中内部类
- java中内部类
- java中内部类的研究
- java中内部类的研究
- Java中匿名内部类的作用
- Java中匿名内部类的使用方法
- Java中内部类的调用
- Java中内部类的实例化
- java中内部类的访问调用
- Java中内部类的使用
- MySQL processlist – 一个辅助的存储过程
- 如何重新划分Swap交换分区
- The Java EE 5Tutorial-Preface(注解)
- Java中接口的编写与实现
- org.quartz.plugins.xml.JobInitializationPlugin] [ERROR] - Error scheduling jobs: no protocol
- Java中内部类的编写
- 指向类的成员的指针
- J2EE项目在LINUX环境下的部署:二、F-Secure SSH Client的使用
- 配置solr使其支持中文检索
- 经验从哪里来?从痛苦中来
- datagridview列表导出到EXCEL方法
- global-forwards的作用
- oracle有continue的用法
- Oracle 数据库 10g系列产品