概念:内部类就是类的内部定义的类

成员内部类格式如下:class Outer{

class Inner{}

}

编译上述代码会产生两个文件:Outer.class和Outer$Inner.class

在外部创建内部类对象

内部类除了可以在外部类中产生实例化对象,也可以在外部类的外部来实例化。所以内部类的访问:通过"外部类.内部类"的形式表示

Outer out=new Outer();//产生外部类实例

Outer.Inner in=null;//声明内部类对象

in=out.new Inner();//实例化内部类对象

public class Practice14 {

    public static void main(String[] args) {
// TODO Auto-generated method stub
Outer o=new Outer();
o.print(); //直接在外部使用内部类,不推荐使用
Outer.Inner in=o.new Inner("在外部使用内部类");
in.print();
}
} class Outer{
public void print(){
//在外部类实例化内部类,并调用方法
Inner i=new Inner("成员内部类");
i.print();
}
class Inner{
private String name;
public Inner(String name){
this.name=name;
}
public void print(){
System.out.println(name);
}
}
}

方法内部类格式如下:class Outer{

             public void doSomething(){

                class Inner{

                  public void seeOuter(){}

               }

              }

             }

注意:1.方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化

      2.方法内部类对象不能使用该内部类所在方法的非final局部变量

 public class Practice14 {

     public static void main(String[] args) {
// TODO Auto-generated method stub
Outer o=new Outer();
o.print1(); }
} class Outer{ public void print1(){
final int x=10;//方法内部类对象不能使用该内部类所在方法的非final局部变量
//在方法内创建内部类
class Inner1{
public void print(){
System.out.println("我是方法内部类"+x);
}
}
Inner1 i=new Inner1();//只能在定义该内部类的方法内实例化
i.print();
} }

静态内部类:在一个类内部定义一个静态内部类:静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它。静态嵌套类仅能访问外部类的静态成员和方法。

      class Outer{

        static class Inner{}

      class Test{

        public static void main(String[] args){

          Outer.Inner n=new Outer.Inner();

      }

      }

 public class Practice14 {

     public static void main(String[] args) {
// TODO Auto-generated method stub
//在外部直接使用静态内部类(创建静态内部类对象不需要依赖外部类的对象)
//静态内部类在之后的安卓编程中经常使用(重点)
Outer.Inner o=new Outer.Inner();
o.print();
}
} class Outer{
static class Inner{
public void print(){
System.out.println("静态");
}
} }

匿名内部类:匿名内部类就是没有名字的内部类。有三种情况:继承式的匿名内部类;接口市的匿名内部类;参数式的匿名内部类;

在使用匿名内部类时,记住以下原则:

1.不能有构造方法,只能有一个实例

2.不能定义任何静态成员、静态方法

3.不能是public,protected,private,static

4.一定是在new的后面,用其隐含实现一个接口或实现一个类

5.匿名内部类为局部的,所以局部内部类的所有限制都对其生效

 public class Practice14 {

     public static void main(String[] args) {
// TODO Auto-generated method stub
Boy b=new Boy();
b.print(); b.print2(new Child(){
public void desc(){
System.out.println("参数式的匿名内部类");
}
});
}
} interface Child{
public void desc();
} class Boy{
public void print(){
Child C=new Child(){
public void desc(){
System.out.println("接口市的匿名内部类");
}
};
C.desc();
}
public void print2(Child ch){
ch.desc();
}
}

定义内部类时优先考虑静态内部类,可以防止内存溢出。

Java面向对象_内部类的更多相关文章

  1. 黑马程序员_Java面向对象_内部类

    6.面向对象_内部类 1.内部类定义 内部类:将一个类定义在另一个类里面,对里面那个类就称为内部类.(内置类.嵌套类)内部类可以被私有修饰. 2.内部类访问规则 访问特点: 内部类可以直接访问外部类中 ...

  2. Java核心基础第5篇-Java面向对象_类和对象

    Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...

  3. Java面向对象_继承——基本概念以及管理化妆品实例分析

    一.继承的基本概念: 1.继承是面向对象三大特征之一 2.被继承的类成为父类(超类),继承父类的类成为子类(派生类) 3.继承是指一个对象直接使用另一个对象的属性和方法 4.通过继承可以实现代码重用 ...

  4. Java面向对象15——内部类

    内部类(了解) 成员内部类  package oop.demon01.demon10; ​ public class Outer { ​     private int id = 10;     pu ...

  5. Java基础_内部类、静态内部类、成员内部类、局部内部类、匿名内部类 (转)

    From: http://www.itzhai.com/java-based-notebook-a-static-inner-class-within-a-class-member-within-th ...

  6. java面向对象_接口

    java接口 interface,是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但 ...

  7. JAVA面向对象-----局部内部类

    局部内部类 局部内部类概述:包含在外部类的函数中的内部类称之为局部内部类. 访问:可以在包含局部内部类的方法中直接创建局部内部类的对象调用局部内部类的成员. 注意:局部内部类只能访问所在函数的fana ...

  8. LY.JAVA面向对象编程.内部类

    2018-07-18 10:14:48 /* 内部类概述: 把类定义在其他类的内部,这个类就被称为内部类. 举例:在类A中定义了一个类B,类B就是内部类. 内部的访问特点: A:内部类可以直接访问外部 ...

  9. Java面向对象_抽象类、接口

    一.抽象类 概   念:很多具有相同特征和行为的对象可以抽象为一个类:很多具有相同特征和行为的类可以抽象为一个抽象类 关键字:abstract 规   则:1.抽象类可以没有抽象方法,有抽象方法的类必 ...

随机推荐

  1. 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历

    二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根 ...

  2. Ajax的包装

    /** * Created by Administrator on 2016/12/27. *//** * 创建XMLHttpRequest对象 * @param _method 请求方式: post ...

  3. poi包的几行基本的设置单元格样式

    ——杂言:写过很多遍这段代码,今天姑且记录一下,便于翻阅. jar:poi-3.7.jar 注意:第8行应该调用cellStyle.setFillForeGroundColor(HSSFColor.G ...

  4. SharePoint 无法“使用资源管理器打开”

    提示错误信息: 在文件资源管理器中打开此位置时遇到问题.将此网站添加到受信任的站点列表,然后重试. 服务器情况: 安装 Internet Explorer 10 后,在 Windows 资源管理器中打 ...

  5. ubuntu下root用户默认密码及修改方法

    [ubuntu下root用户默认密码及修改方法] 很多朋友用ubuntu,一般都是装完ubuntu系统,马上就修改root密码了,那么root用户的默认密码是多少,当忘记root用户密码时如何找回呢, ...

  6. spring 4.0 注解数据验证1

    通常情况下,数据验证都分为前台验证,后台验证.并且前台JS验证是肯定有的,那么其实验证的错误信息根本不必通过后台传过去,哪怕就是想国际化,前台JS也能够胜任. 如果前台验证足够了,那么如果还有不正确的 ...

  7. Centos 6.5 hadoop 2.2.0 全分布式安装

    hadoop 2.2.0 cluster setup 环境: 操作系统:Centos 6.5 jdk:jdk1.7.0_51 hadoop版本:2.2.0 hostname    ip master ...

  8. p1198&bzoj1012 最大数

    传送门(洛谷) 传送门(bzoj) 题目 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数 ...

  9. java类什么时候初始化?

    Java虚拟机规范中并没有进行强制玉树什么情况下需要开始类加载过程.但是对于初始化阶段,虚拟机规范则是严格规定了有且仅有5种情况必须立即对类进行“初始化”(而加载,验证,准备自然需要在此之前开始): ...

  10. 数据库 连接(join)

    转自http://www.cnblogs.com/caozengling/p/5318696.html 数据库中飞内连接,自然连接,外连接 数据库中的连接join氛围内连接,自然连接,外连接,外连接又 ...