JAVA基础之内部类

2017-01-13

1、java中的内部类都有什么?!

    成员内部类

    局部内部类

    匿名内部类

    静态内部类

2、内部类详解

    •成员内部类

      在一个类的内部再创建一个类,成为内部类

      1)在一个类中使用内部类,可以在内部类中直接存取所在类的私有属性或方法

 class Outer{
//外部类Outer
private int i = 111 ;//外部类私有变量
class Inner{
//内部类Inner
private int j = 222 ;//内部类私有变量
public void print(){
System.out.println("外部类的私有属性"+ i);
System.out.println("内部类的私有属性"+ j);
}
}
}
public class ClassDemo5 {
public static void main(String[] args) {
Outer o = new Outer() ;
Outer.Inner i = o.new Inner() ;
i.print() ;
}
}

       2)内部类的实例化方法

import 面向对象基础.Outer.Inner;  
//第一种方式:导入import 面向对象基础.Outer.Inner;包
Outer.Inner i = o.new Inner() ;
//第二种方式:外部类.内部类 对象名 = 外部类对象.new 内部类

         3)外部类访问内部类

 class Fatch{
//外部类Fatch
public class Student{
//内部类Student
public void show(){
//内部类show()方法
System.out.println("内部类Student的show()方法");
}
}
public void print(){
/**
* 外部类不可以直接访问内部类的属性或方法,
* 必须创建内部类对象才可以访问
*/
new Student().show() ; //使用匿名对象实例化调用内部类的类成员
System.out.println("外部类Fatch的print()方法");
}
}
public class ClassDemo4 {
public static void main(String[] args) {
Fatch f = new Fatch() ; //实例化外部类对象
f.print() ; //调用外部类的print()方法
}
}

      4)如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。

 class Outer1 {
//外部类
private int i = 10 ;//外部类私有变量
class Inner1{
//内部类
private int i = 20 ;//内部类私有变量
public void show(){
//内部类方法
System.out.println("内部类的变量"+ this.i );//使用this关键字访问内部类成员
System.out.println("外部类的变量"+ Outer1.this.i);//使用外部类名.this.变量名 来访问外部类成员
}
}
public void print(){
new Inner1().show() ; //调用内部类方法
}
}
public class ClassDemo6 {
public static void main(String[] args) {
new Outer1().print() ;  
} }

   

        •注意点:

          »实例化内部类之前必须实例化外部类

          »内部类可以随意访问他的外部类成员,但外部类不可以直接访问内部类的类成员

          »内部类可以被声明为private 或 protected 权限的访问

          »内部类对象会依赖于外部类对象,除非已经存在一个外部类对象,否则类中不会出现内部类对象

    •局部内部类(方法内部类)

      内部类不仅可以在类中进行定义,也可以在类的局部位置进行定义,例如在类的方法或者任意的作用域中都可以定义内部类

         1)在外部类的方法中定义一个方法内部类

 class Demo1{
//外部类Demo
final int I = 10 ;//外部类定义的常量
public void show(){ //外部类的show()方法
class Inne{ //方法内部类
int j = 20 ; //方法内部类变量
private void inshow() { //方法内部类中的inshow()方法
System.out.println("外部类常量"+ I );
System.out.println("方法内部类变量"+ j );
}
}
Inne in = new Inne() ; //实例化内部类对象
in.inshow() ; //调用内部类方法
}
}
public class ClassDemo7 {
public static void main(String[] args) {
Demo1 d = new Demo1() ;
d.show() ;
}
}

    注意:如果方法中的参数需要被传递进去,就必须把参数声明成final类型

      •静态内部类

      如果一个内部类被声明为static,此内部类就称为外部类 

       1)静态内部类可以通过(new 外部类名.内部类.内部类方法名) ,来调用静态内部类方法

 class Outer2{
//外部类
private static String str = "张博杰" ;//外部类的静态变量
static class Inner2{
//使用static声明 的静态内部类
public void fun() {
//静态内部类方法
System.out.println("外部类的静态变量"+" "+ str);
}
}
}
public class ClassDemo8 {
public static void main(String[] args) {
new Outer2.Inner2().fun() ;
//静态内部类可以使用new 外部类名.内部类.内部类方法名 ,来调用静态内部类方法
}
}

      

        •匿名内部类

          匿名内部类也就是没有名字的内部类,正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写.使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

         1)匿名内部类的实现

 abstract class A2 {    //抽象类A2
public abstract void eat() ;
}
public class ClassDemo9 {
public static void main(String[] args) {
/**
* 如果A2这个抽象类只用一次,那么就可一使用匿名内部类来实现
*/
A2 a = new A2(){
public void eat(){
System.out.println("我要吃饭");
}
} ;
a.eat() ;
}
}

JAVA基础之内部类的更多相关文章

  1. 黑马程序员——JAVA基础之内部类,匿名内部类

    ------- android培训.java培训.期待与您交流! ---------- 内部类 将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类). 内部类访问特点: •  内部 ...

  2. Java面向对象之内部类(访问格式)

    一.基础概念 1.内部类是定义在类中的类.A类需要直接访问B类中的成员时,可以将A类定义到B类中,作为B类的内部类存在. 2.内部类可以相当于外部类中的一个成员,可以被成员修饰符所修饰.(如:publ ...

  3. Java系列之内部类

    今天温习一下 Java 中的内部类,内部类一般有如下几种:静态内部类.成员内部类.匿名内部类和方法内部类,下文中将主要介绍静态内部类和成员内部类,主要内容如下: 概述 静态内部类 成员内部类 匿名内部 ...

  4. Java学习之内部类

    示例1: package com.swust.面向对象; class Person1{ private String username="zhangsan"; public Per ...

  5. Java面向对象之内部类(匿名内部类)

    一.基础概念 匿名内部类:简化书写的内部类.其实匿名内部类就是一个子类对象. 前提:内部类需要继承或者实现外部的类或者接口. 格式:new 父类或者接口(){定义子类的内容} 二.将内部类定义到局部的 ...

  6. [内部类] java笔记之内部类

    1.内部类的分类 2.成员内部类的定义格式 3.一旦使用了内部类,那么生成的class文件长啥样? 其中Body是外部类,Heart是Body的内部类,所以中间有个美元符号$,所以给类进行命名时,不要 ...

  7. Java基础00-内部类23

    1. 内部类 内部类 1.1 内部类概述 代码示例: 1.2 成员内部类 代码示例: 创建一个成员内部类:定义时没有小括号是因为类是没有形参的.在类的成员位置,就是成员内部类了 创建测试类:这里发现不 ...

  8. java之内部类

    最近学了java,对内部类有一点拙见,现在分享一下 所谓内部类(nested classes),即:面向对象程序设计中,可以在一个类的内部定义另一个类. 内部类不是很好理解,但说白了其实也就是一个类中 ...

  9. Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

随机推荐

  1. Oracle执行计划——Oracle 如何启用执行计划

    AUTOTRACE是一项SQL*Plus功能,自动跟踪为SQL语句生成一个执行计划并且提供与该语句的处理有关的统计.SQL*Plus AUTOTRACE可以用来替代SQL Trace使用,AUTOTR ...

  2. C#网络编程系列(两)它Socket同步TCPserver

    声明原文 笔者:竹zz  本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文 ...

  3. 清掉kugo 7 和千千静听的广告

    as below,we know Ad is bothering Way to solve it! Original URL :http://tieba.baidu.com/p/1240429497? ...

  4. 30个HTML初学者建议

    The most difficult aspect of running Nettuts+ is accounting for so many different skill levels. If w ...

  5. Bootstrap 模态框(也可以说的弹出层)

    最近在尝试使用bootstrap的模态框 使用模态框主要要引入一下几个js和css: bootstrap.css jquery.1.9.1.js(这个可以灵活选择) bootstrap.js html ...

  6. 流媒体:V4L2视频获取

    从深圳回来已经20多天了,除了完善毕业设计程序和论文,其他时间都去玩游戏了.真的是最后的一段时间能够无忧无虑在校园里挥霍自己的青春了.今天完成的答辩,比想象的要简单,一直以来想把我现在的这个流媒体的东 ...

  7. 新认识:SDF数据库

    新认识:SDF数据库 一.SDF数据库初探 SDF是一个标准缩略数据库格式.这个数据库包含扩展名为.sdf的文件并且以结构化文件格式进行数据存储.这些SDF文件通常用于在不同数据库应用之间移动数据.它 ...

  8. [转]iOS IPC via NSFileCoordinator and NSFilePresenter

    Source:http://mjtsai.com/blog/2014/11/21/ios-ipc-via-nsfilecoordinator-and-nsfilepresenter/ 为什么每次我想到 ...

  9. [笔记] OS X and iOS 内核开发

    一.KEXT包的安全性说明 KEXT 程序包及其包含的所有文件及文件夹必须属于 root 用户(用户 id 是 0) KEXT 程序包及其包含的所有文件及文件夹必须属于 wheel 组(组 id 是 ...

  10. 企业架构研究总结(35)——TOGAF架构内容框架之构建块(Building Blocks)

    之前忙于搬家移居,无暇顾及博客,今天终于得闲继续我的“政治课”了,希望之后至少能够补完TOGAF方面的内容.从前面文章可以看出,笔者并无太多能力和机会对TOGAF进行理论和实际的联系,仅可对标准的文本 ...