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

    定义:将一个类的定义放在另一个类的定义内部,这就是内部类。

    为什么要使用内部类?在《Thinking in java》中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响

          在我们程序设计中有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整

    一个简单的内部类:

     1 /**
     2  * 内部类
     3  * 2016/5/5
     4  **/
     5 package cn.Java_7;
     6 
     7 public class InsideClass {
     8     
     9     class Father{
    10         Father(){
    11             System.out.println("father");
    12         }
    13         public void Fun(){
    14             System.out.println("nihao ");
    15         }
    16     }
    17     
    18     public Father father(){
    19         return new Father();
    20     }
    21     
    22     public static void main(String[] args) {
    23         InsideClass in = new InsideClass();
    24         InsideClass.Father father = in.father();
    25         father.Fun();
    26     }
    27 
    28 }

    如果要在静态方法中创建内部类的对象就必须,像上面一样,写一个方法,方法返回类型就是这个对象的类型。

    链接到外部类:

     1 /**
     2  * 内部类
     3  * 2016/5/5
     4  **/
     5 package cn.Java_7;
     6 
     7 class GrandFather{
     8     GrandFather(){
     9         System.out.println("GrandFather~~~");
    10     }
    11     public void Gfun(){
    12         System.out.println("GrandFather  Gfun");
    13     }
    14 }
    15 
    16 public class InsideClass {
    17     
    18     class Father extends GrandFather{
    19         Father(){
    20             System.out.println("father~~~");
    21         }
    22         public void Fun(){
    23             super.Gfun();
    24             System.out.println("Father  Fun");
    25         }
    26     }
    27     
    28     public Father father(){
    29         return new Father();
    30     }
    31     
    32     public static void main(String[] args) {
    33         InsideClass in = new InsideClass();
    34         InsideClass.Father father = in.father();
    35         father.Fun();
    36     }
    37 
    38 }

      上面代码的内部类继承的外部类,并且可以访问外部类的方法,而内部类只能被外围类所访问,这样提供能更好的封装。

      使用内部类优势小结:

      1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。

          2在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。

          3内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。

          4内部类提供了更好的封装,除了该外围类,其他类都不能访问。

    使用 .this    .new

     1 /**
     2  * 内部类
     3  * 2016/5/5
     4  **/
     5 package cn.Java_7;
     6 
     7 public class InsideClass {
     8     
     9     class Father {
    10         Father(){
    11             System.out.println("father~~~");
    12         }
    13         public void Fun(){
    14             System.out.println("Father  Fun");
    15         }
    16         public InsideClass grandfather(){
    17             return InsideClass.this;
    18         }
    19     }
    20     
    21     public Father father(){
    22         return new Father();
    23     }
    24     
    25     public static void main(String[] args) {
    26         InsideClass in = new InsideClass();
    27         InsideClass.Father father = in.father();
    28         father.Fun();
    29     }
    30 
    31 }

    内部类还有很多其他特性,在这里先总结到这里。

  • 相关阅读:
    Using Redis as Django's session store and cache backend
    Celery 和 Redis 入门
    centos 安装 rabbitmq
    CentOS 6 安装 Python3.5以及配置Django
    python metaclass 入门简介
    uWSGI其三:uWSGI搭配Nginx使用
    CentOS 6.5 安装 Nginx 1.7.8 教程
    基于nginx和uWSGI在Ubuntu上部署Djan
    CentOS 6.5 下安装 Redis 2.8.7
    查看Selinux和关闭Selinux
  • 原文地址:https://www.cnblogs.com/snail-lb/p/5463486.html
Copyright © 2011-2022 走看看