编程语言
首页 > 编程语言> > Java 类的内部成员之五:内部类

Java 类的内部成员之五:内部类

作者:互联网

  1 package com.bytezreo.innerclass;
  2 
  3 /**
  4  * 
  5  * @Description  类的内部成员之五:内部类
  6  * @author Bytezero·zhenglei!        Email:420498246@qq.com
  7  * @version
  8  * @date 上午8:56:44
  9  * @   1.Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B成为外部类
 10  *      
 11  *     2.内部类的分类:成员内部类(静态,非静态) vs  局部内部类(方法内  代码块内  构造器内)
 12  *
 13  *       3.成员内部类:
 14  *         一方面,作为外部类的成员:
 15  *             >调用外部类的结构
 16  *             >可以被 static 修饰
 17  *             >可以被 四种不同的权限修饰
 18  *         
 19  *         
 20  *         
 21  *         另一方面:作为一个类:
 22  *             >类内可以定义属性,方法,构造器等
 23  *               >可以用final修饰,表示此类不能被继承,言外之意就是不适用final,可以被继承
 24  *               >可以被abstract修饰,此类不能被实例化
 25  *
 26  *
 27  *        4.关注如下的 3  个 问题
 28  *          4.1 如何实例化成员内部类的对象
 29  *          
 30  *          4.2 如何在成员内部类中区分调用外部类的结构
 31  *          
 32  *          4.3 开发中局部内部类的使用   见 InnerClassTest2.java
 33  *
 34  *
 35  *
 36  */
 37 public class InnerClassTest {
 38     public static void main(String[] args) {
 39         
 40         //创建内部类的 Dog 的实例化(静态成员内部类):
 41         Person.Dog dog = new Person.Dog();
 42         dog.show();
 43         
 44         //创建内部类的 Bird 的实例化(非静态成员内部类):
 45         //Person.Bird bird = new Person.Bird();   //不可以这样
 46         Person p =new Person();
 47         Person.Bird bird = p.new Bird();
 48         bird.sing();
 49         bird.display("鹦鹉");
 50         
 51     }
 52 }
 53 
 54 class  Person{
 55     
 56     String name = "外部类----小明";
 57     int age = 12;
 58     
 59     public void eat() {
 60         
 61         System.out.println("人吃饭");
 62     }
 63     
 64     
 65     
 66     //静态成员内部类
 67      static class Dog{
 68         String name;
 69         int age;
 70         
 71         public void show() {
 72             System.out.println("忠犬八公");
 73             //eat();  //静态里不允许调用 非静态的方法   
 74             
 75         }
 76             
 77         
 78         
 79     }
 80     
 81     //非静态成员内部类
 82      class Bird{
 83         String  name = "内部类----小小鸟";
 84         
 85         public Bird() {
 86             
 87         }
 88         public void sing() {
 89             
 90             System.out.println("我是一个小小鸟");
 91             //调用外部类的方法
 92             eat();  //省略了   Person.this.eat();
 93             Person.this.eat();
 94             
 95             System.out.println(age); //内部类的
 96             
 97             
 98             
 99         }
100         
101         public void display(String name) {
102             
103             System.out.println(name);       //方法的形参
104             System.out.println(this.name);  //此类的属性--内部类属性
105             System.out.println(Person.this.name);   //Person类的属性 --外部类的属性
106             
107         }
108         
109         
110     }
111     
112     
113     public void method() {
114         
115         //局部内部类
116         class AA{
117             
118             
119         }
120         
121     }
122     
123     //代码块内
124     {
125         
126         //局部内部类
127         class BB{
128             
129             
130         }
131     }
132     
133 
134 //构造器里面
135 public Person() {
136     //局部内部类
137     class CC{
138         
139         
140     }
141     
142 }
143 
144 
145 
146 }

 

 

 

package com.bytezreo.innerclass;

public class InnerClassTest2 {

    
    public void method() {
        
        //局部内部类
        class AA{
            
            
        }
    }
    
    
    //返回一个实现Comparable接口的类的对象
    public Comparable getComparable() {
        
//        //创建一个实现了Comparable接口的类:局部内部类
//        //方式一:
//        class MyComparable implements Comparable{
//
//            @Override
//            public int compareTo(Object o) {
//            
//                return 0;
//            }
//            
//        }
//        
//        return  new MyComparable();
        
        
        //方式二
        return new Comparable() {

            @Override
            public int compareTo(Object o) {
                // TODO Auto-generated method stub
                return 0;
            }
            
        };
        
    }
    
}

 

标签:Java,内部,void,class,Person,之五,Bird,public
来源: https://www.cnblogs.com/Bytezero/p/15375400.html