zoukankan      html  css  js  c++  java
  • 类的内部成员之五:内部类(Person.Bird bird = p.new Bird();)

    /*
    * 类的内部成员之五:内部类
    * 1. Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类
    *
    * 2.内部类的分类:成员内部类(静态、非静态) vs 局部内部类(方法内、代码块内、构造器内)
    *
    * 3.成员内部类:
    * 一方面,作为外部类的成员:
    * >调用外部类的结构
    * >可以被static修饰
    * >可以被4种不同的权限修饰
    *
    * 另一方面,作为一个类:
    * > 类内可以定义属性、方法、构造器等
    * > 可以被final修饰,表示此类不能被继承。言外之意,不使用final,就可以被继承
    * > 可以被abstract修饰
    *
    *
    * 4.关注如下的3个问题
    * 4.1 如何实例化成员内部类的对象
    * 4.2 如何在成员内部类中区分调用外部类的结构
    * 4.3 开发中局部内部类的使用 见《InnerClassTest1.java》
    * */

    public class InnerClassTest {
        public static void main(String[] args) {
            
            //创建Dog实例(静态的成员内部类):
            Person.Dog dog = new Person.Dog();
            dog.show();
            //创建Bird实例(非静态的成员内部类):
    //        Person.Bird bird = new Person.Bird();//错误的
            Person p = new Person();
            Person.Bird bird = p.new Bird();
            bird.sing();
            
            System.out.println();
            
            bird.display("黄鹂");
            
        }
    }
    
    
    class Person{
        
        String name = "小明";
        int age;
        
        public void eat(){
            System.out.println("人:吃饭");
        }
        
        
        //静态成员内部类
        static class Dog{
            String name;
            int age;
            
            public void show(){
                System.out.println("卡拉是条狗");
    //            eat();
            }
            
        }
        //非静态成员内部类
        class Bird{
            String name = "杜鹃";
            
            public Bird(){
                
            }
            
            public void sing(){
                System.out.println("我是一只小小鸟");
                Person.this.eat();//调用外部类的非静态属性
                eat();
                System.out.println(age);
            }
            
            public void display(String name){
                System.out.println(name);//方法的形参
                System.out.println(this.name);//内部类的属性
                System.out.println(Person.this.name);//外部类的属性
            }
        }
        
        
        public void method(){
            //局部内部类
            class AA{
                
            }
        }
        
        {
            //局部内部类
            class BB{  
                
            }
        }
        
        public Person(){
            //局部内部类
            class CC{
                
            }
        }
        
        
        
    }
    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    IDEA 基本配置
    IDEA 创建一个普通的java项目
    Intellij Idea 创建一个Web项目
    override的实现原理
    elasticsearch 复杂查询小记
    post 中文数据到elasticsearch restful接口报json_parse_exception 问题
    String intern()方法详解
    JVM的DirectMemory设置
    深入浅出 JIT 编译器
    为什么 JVM 不用 JIT 全程编译
  • 原文地址:https://www.cnblogs.com/CCTVCHCH/p/14612951.html
Copyright © 2011-2022 走看看