内部类简要分析
来源:互联网 发布:ubuntu 图形编程 编辑:程序博客网 时间:2024/04/29 13:40
内部类
内部类定义:在Java中,允许在一个类的内部定义类,这样的类称作内部类也叫做嵌套类,这个内部类所在的类称作外部类。
分类:静态内部类 方法内部类 成员内部类 匿名内部类
创建内部类的对象应该注意点:
第一:在外部类的内部可以直接创建对象。
方式:inner s=new inner();
第二:在外部类的外部不能直接创建对象,必须使用外部类的类名加以确定。
方式:假设A是外部类,B是内部类
A.B b=newA().new B();
内部类的一些特性:
第一:内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。
第二:内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。
第三:内部类成员可以直接访问外部类的成员(包括私有成员)。
第四:比类具有更好的封装性。
重点就匿名内部类来讨论。
匿名内部类一定是跟在new的后面,用其隐含实现一个接口或一个类,没有类名,根据多态,我们使用其父类名。因为匿名内部类属于局部类,所以局部类的所有限制对其生效。匿名内部类是唯一一种无构造方法的类。匿名内部类在编译时,系统自动起名Out$1.class。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。(其中涉及到多态 ,向上转,组合,继承的某些组织方式)
匿名内部类的特点:
第一:唯一没有构造函数的类。
第二:没有权限设置如privatepublic protected static
第三:只能实例化匿名内部类的实例。
第四:不能定义没有静态方法,类。
内部类的优点:
代码整洁,紧凑,精简。可以直接使用接口或者类,从而不用增加其他类或接口,只需转换为使用现有的类或接口。
缺点:可读性较差。
实例化
代码演示:
packagecom.yc.bean;
public class Outer {
private int num = 4; // 定义成员变量
public void test(){
Inner inner = newInner();
inner.show();
}
// 下面的代码定义了一个成员内部类
class Inner {
void show(){
// 在成员内部类的方法中访问外部类的成员变量
System.out.println("访问外部类的私有成员\t"+"num=" + ++num);
}
}
}
packagecom.yc.bean;
public class Example{
public static voidmain(String[] args){
Outer.Inner inner =newOuter().new Inner();//创建内部类对象
inner.show();//调用test()方法
}
}
测试结果显示
访问外部类的私有成员 num=5
packagecom.yc.bean;
// 内部类相当于外部类的属性,内部类对象的产生要依赖于外部类对象,只要是属性可以有的修饰符都可以修饰内部类。
// 内部类在编译时同样会产生class文件。命名为:外部类名$内部类名.class
public class Myclass{
public Myclass(){
System.out.println("外部类..........");
}
class M {
public M() {
System.out.println("内部类..........");
}
}
public static voidmain(String[] args) {
Myclass my = newMyclass();//外部类声明
Myclass.M m = my.new M();//内部类声明
}
}
测试结果显示
外部类..........
内部类..........
- 内部类简要分析
- Java内部类分析
- java内部类分析
- java内部类分析
- 内部类分析
- JAVA内部类示例分析
- JAVA内部类的分析
- java内部类小分析
- java当中内部类分析
- java内部类的分析
- JAVA内部类示例分析
- java 内部类简单分析
- 匿名内部类的分析
- ThreadPoolExecutor.Worker内部类分析
- ThreadPoolExecutor.Worker内部类分析
- Java内部类原理分析(静态内部类和成员内部类)
- java内部类的作用分析
- Java内部类的分析和整理
- UI基础_UIActivityIndicatorView的使用
- 如何使VMware虚拟机下的虚拟机可以相互连接又可以访问外网
- 服务器主板s2600cp2配置Raid5全过程
- android .9资源简单使用方法
- 无线网mac下virtualbox中centos网络ip
- 内部类简要分析
- linux下c程序访问mysql实例
- python Image模块学习
- Reachability框架(联网状态的检测)
- Android Studio中使用开源库volley进行网络访问简单示例
- vc++6.0 编译执行opencv1.0
- 动态内容爬虫
- 基于S2SH开发必须的jar说明
- Ubuntu下用pyenv进行python环境隔离