zoukankan      html  css  js  c++  java
  • 2018.1.9内部类

    内部类:声明在类的内部的类,也叫嵌套类(Inner Class)。

     

    作用:可以访问外部类的所有属性和方法,内部类通常用于外部类实现辅助功能。换句话说,内部类和外部类联系较为紧密。

     

    为什么使用嵌套类呢?

    1.嵌套类对象可以访问创建它的外部类的使用属性和方法。

    2.嵌套类通过在其外部类环境内的紧耦合嵌套声明,不为同一包的其他类所见,可以支持更高的封装性。(权限访问:仅在本类中)

    3.方便运行时回调。(A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法

    4.嵌套类编写事件时很方便。(应用于GUI)

     

    嵌套类定义的语法:

    public class OuterClass{

    ...

    public/protected/private  static class NestedClass{

    }

    }

    说明:

    1.顶级类只能用公共的或默认的权限修饰符。(何为顶级类?外部类吗?当你在其它类的外面声明一个类时,Java就认为该类是一个顶级类。)

    2.嵌套类和顶级类的区别在于,嵌套类分为静态类和非静态类两种。

     

     

    内部类也是外部类成员的一种,与外部类的成员变量、成员方法并列。

     

    /*内部类的使用*/
    
    public class MemberInnerClassTest{
    
     public static void main(String[] args) {
    
      Outer outer=new Outer();
    
      outer.test();
    
      outer.accessInner();
    
      //外部类以外创建内部类的对象
    
      Outer.Inner inner=outer.new Inner();
    
      inner.display();
    
     }
    
    }
    
     
    
    class Outer{
    
     private int outer_i=100;
    
     private int j=123;
    
     public void test(){
    
     System.out.println("Outer:test()");
    
     }
    
     
    
     public void accessInner(){
    
     //外部类中使用内部类也需要创建出它的对象
    
     Inner inner=new Inner();
    
     inner.display();
    
     }
    
     
    
     
    
     public class Inner{
    
     private int inner_i=100;
    
     private int j=789;
    
     //内部类中定义的这个属性与外部内的属性同名
    
     public void display(){
    
     //内部类中可直接访问外部类的方法
    
         System.out.println("Inner:outer_i="+outer_i);
    
         test();
    
         //内部类可以直接访问内部类的方法
    
         //内部类可以用this来访问自己的成员
    
         System.out.println("Inner:inner_i="+this.inner_i);
    
         System.out.println(j);
    
         //访问的是内部类中定义的同名成员,因为有个this
    
         /*通过“外部类.this.成员名”可以访问内部类中定义的同名成员,
    
         有点不理解,this不是指向自身吗?它是指代当前对象,Outer用this指向内部类的变量j,就近原则*/
    
         System.out.println(Outer.this.j);
    
     }
    
     }
    
    }

     

     

     

    this关键字

    1.在类的方法定义中使用的this代表使用该方法的对象的引用。

    2.当必须指出当前使用方法的对象是谁时要使用this。

    3.有时使用this可以处理方法中成员变量和参数重名的情况。

    4.this可以看作是一个变量,它的值是当前对象的引用

     

    public class Leaf{

    int i=0;

    Leaf(int i){

    this.i=i;

    //后面的i是参数i,当前对象,this.i中的i是成员变量i

    Leaf increament(){

    i++;

    return this;

    //返回自身

    }

    void print(){

    System.out.println("i="+i);

    }

    public static void main(String[] args) {

    Leaf leaf=new Leaf(100);

    /*Leaf构造方法中的参数i为100向成员变量中的i赋值;

    对象leaf与类Leaf中的参数100指向堆内存中的成员变量i并赋值,

    但是好像成员变量应该在栈内存啊??栈内存指向堆内存,引用对象指向本体类?!*/

    Leaf.increament().increament().print();

    }

    }

    }

     

     

     

    还有特殊的内部类

    1.局部内部类

    局部内部类是在方法体内声明的类,像是局部变量一样,只在它的代码块内可见。但它可以在运行时访问它所在的方法中的final参数和final局部变量。

     

    2.匿名内部类

    匿名内部类是没有声明名称的内部类。

    public class OuterClass{

    new 已存在的类名(){

    }

    }

           匿名内部类在声明时就直接创建出对象了,都是某个已存在类或接口的子类或具体的实现类。

     

    3.静态嵌套类

    用static修饰的嵌套类被称作为嵌套类。如果一个嵌套类用static修饰就相当于是在外部定义了一个类,即共享,静态嵌套类中可以声明static成员或非成员方法,但只能访问类中的静态成员。

     

     

     

     

    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    【ybtoj】【Hash】回文子串
    Design Pattern:状态模式
    Design Pattern:装饰者模式
    Design Pattern:外观模式
    Design Pattern:适配器模式
    Design Pattern:模板方法模式
    Design Pattern:命令模式
    Design Pattern:观察者模式
    Design Pattern:复合模式
    Design Pattern:迭代器模式
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/8254066.html
Copyright © 2011-2022 走看看