Java-面向对象(基础编)--内部类
来源:互联网 发布:学python要什么基础 编辑:程序博客网 时间:2024/05/07 01:59
内部类
一. 内部类的基本定义
在类内部可以定义方法和成员变量,而且在类内部也可以定义另一个类。如果在类Outer的内部再定义7一个类Inner,此时列Inner就称为内部类,而类Outer则称为外部类。
内部类可声明成public或private。当内部类声明成public或private时,对其访问的权限与成员变量和成员方法完全相同。格式如下:
标识符 class 外部类的名称{ //外部类的成员 标识符 class 内部类的名称{ //内部类的成员}}
【定义内部类】
class Outer{ private String info="hello world!!"; class Inner { public void print(){ System.out.println(info); } }; public void fun(){ new Inner().print(); }};public class InnerClassDemo01{ public static void main(String args[]){ new Outer().fun(); }}
运行结果:
hello world!!
从程序运行结果中可以清楚地发现,Inner类作为Outer类的内部类存在,并且在外部类的fun()方法之中直接实例化内部类的对象并调用方法print(),但是从以上代码中可以明显地发现,内部类的存在实际上已经破坏了一个类的基本结构,因为类是由属性及方法组成的,所以这是内部类的一个缺点,那么内部类有什么优点呢?如果现在把内部类拿到外面,就能发现其优点。代码如下:
【将内部类拿到外部】
class Outer{ private String info="hello World!!!"; public String getInfo(){ return this.info; } public void fun(){ new Inner(this).print(); }}class Inner{ private Outer out=null; public Inner(Outer out){ this.out=out; } public void print(){ System.out.println(out.getInfo()); }};public class InnerClassDemo02{ public static void main(String args[]){ new Outer().fun(); }}
运行结果:
hello World!!!
以上程序完成了与内部类同样的功能,但是代码明显比之前的更加复杂,所以内部类的唯一好处就是可以方便地访问外部类中的私有属性。
二. 使用static定义内部类
使用static声明的内部类就变成了外部类,但是用static声明的内部类不能访问非static的外部类属性。
【使用static声明内部类】
class Outer{ private static String info="hello World!"; static class Inner { public void print(){ System.out.println(info); } };};public class InnerClassDemo03{ public static void main(String args[]){ new Outer.Inner().print(); }}
运行结果:
hello World!
以上程序将info属性定义成为static类型,这样程序中就可以通过static声明的内部类直接访问此static属性。
三. 在外部访问内部类
一个内部类除了可以通过外部类访问,也可以直接在其他类中进行调用,调用的基本格式为:
外部类.内部类 内部类对象=外部类实例.new 内部类();
以上的操作格式中,首先要找到外部类的实例化对象之后,才可以通过外部类的实例化对象去实例化内部类的对象。
注意:在内部类定义之后,生成的class文件是以Outer
【在外部访问内部类】
class Outer{ private String info="hello world!!"; class Inner { public void print(){ System.out.println(info); } };};public class InnerClassDemo04{ public static void main(String args[]){ Outer out=new Outer(); //实例化外部类对象 Outer.Inner in=out.new Inner(); //实例化内部类对象 in.print(); //调用内部类的方法 }}
运行结果:
hello world!!
四. 在方法中定义内部类
也可以在方法中定义一个内部类,但是在方法中定义的内部类不能直接访问方法中的参数,如果方法中的参数要想被内部类访问,中无参数前面必须加上final关键字。
【在方法中定义内部类】
class Outer{ // 定义外部类 private String info = "hello world" ; // 定义外部类的私有属性 public void fun(final int temp){ // 定义外部类的方法 class Inner{ // 在方法中定义的内部类 public void print(){ // 定义内部类的方法 System.out.println("类中的属性:" + info) ; // 直接访问外部类的私有属性 System.out.println("方法中的参数:" + temp) ; } }; new Inner().print() ; // 通过内部类的实例化对象调用方法 }};public class InnerClassDemo05{ public static void main(String args[]){ new Outer().fun(30) ; // 调用外部类的方法 }};
运行结果;
类中的属性:hello world方法中的参数:30
- Java-面向对象(基础编)--内部类
- JAVA面向对象基础:内部类
- Java面向对象基础--内部类
- java基础3--面向对象(上)(内部类)
- Java基础--面向对象(内部类、异常)
- 面向对象基础(六)[内部类]
- 面向对象基础(内部类)
- java面向对象(内部类)
- java面向对象内部类
- Java面向对象-内部类
- Java基础之面向对象(五)--内部类
- java基础要点(9)面向对象-内部类
- Java基础之面向对象(五)--内部类
- “黑马程序员”java面向对象基础_内部类
- 黑马程序员---Java基础---面向对象:多态、内部类、异常
- java基础--3.面向对象-7.内部类
- java 第七天 面向对象(基础篇之对象数组与内部类)
- Java基础第十二讲:面向对象基础(六)[内部类]
- CSS3(二)选择器
- JAVA EE-REQUEST&RESPONSE
- 线程知识小结
- WebView_js交互
- hdu1702 ACboy needs your help again!(栈和队列
- Java-面向对象(基础编)--内部类
- Android 6.0 新特性(官方文档翻译)
- 【Leet Code- Algorithm】【1-Two Sum】【Python】
- AndroidStudio-Eat-Guide—— 4.第一个项目的创建运行:HelloAS
- Android按钮点击事件的常用写法
- 基础知识总结之---snoopy
- 赛码-将功赎过
- bestcoder round#86解题报告
- A. Crazy Computer