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

    /*
    * 类的第5个成员:内部类
    * 1.相当于说,我们可以在类的内部再定义类。外面的类:外部类。里面定义的类:内部类
    * 2.内部类的分类:成员内部类(声明在类内部且方法外的) vs 局部内部类(声明在类的方法里)
    * 3.成员内部类:
    * 3.1是外部类的一个成员:①可以有修饰符(4个)②static final ③可以调用外部类的属性、方法
    *
    * 3.2具体类的特点:①abstract ②还可以在其内部定义属性、方法、构造器
    *
    * 4.局部内部类:
    *
    * 5.关于内部类,大家掌握三点:
    * ①如何创建成员内部类的对象(如:创建Bird类和Dog类的对象)
    * ②如何区分调用外部类、内部类的变量(尤其是变量重名时)
    * ③局部内部类的使用 (见TestInnerClass1.java)
    *
    */
    public class TestInnerClass {
    public static void main(String[] args) {
    //创建静态内部类的对象:可以直接通过外部类调用静态内部类的构造器
    Person.Dog d = new Person.Dog();//Person.new Dog();
    //Person.Bird b = new Person.Bird();
    //创建非静态的内部类的对象:必须先创建外部类的对象,通过外部类的对象调用内部类的构造器
    Person p = new Person();
    Person.Bird b = p.new Bird();//new p.Bird();
    b.info();
    b.setName("杜鹃");
    }
    }

    class Person{
    String name = "韩梅梅";
    int age;
    //成员内部类(非static的)
    class Bird{
    String name = "黄鹂";
    int id;

    public Bird(){

    }
    public void setName(String name){
    System.out.println(name);//杜鹃
    System.out.println(this.name);//黄鹂
    System.out.println(Person.this.name);//韩梅梅
    }
    public void info(){
    show();
    }
    }
    //成员内部类(静态内部类)
    static class Dog{

    }

    public void show(){
    System.out.println("我是show()方法");
    }

    public void method1(){
    class A{

    }
    }
    }

    class OuterClass{
    private static String msg = "GeeksForGeeks";
    // 静态内部类
    public static class NestedStaticClass{
    // 静态内部类只能访问外部类的静态成员
    public void printMessage() {
    // 试着将msg改成非静态的,这将导致编译错误
    System.out.println("Message from nested static class: " + msg);
    }
    }
    // 非静态内部类
    public class InnerClass{
    // 不管是静态方法还是非静态方法都可以在非静态内部类中访问
    public void display(){
    System.out.println("Message from non-static nested class: "+ msg);
    }
    }
    }
    class Main
    {
    // 怎么创建静态内部类和非静态内部类的实例
    public static void main(String args[]){
    // 创建静态内部类的实例
    OuterClass.NestedStaticClass printer = new OuterClass.NestedStaticClass();
    // 创建静态内部类的非静态方法
    printer.printMessage();
    // 为了创建非静态内部类,我们需要外部类的实例
    OuterClass outer = new OuterClass();
    OuterClass.InnerClass inner = outer.new InnerClass();
    // 调用非静态内部类的非静态方法
    inner.display();
    // 我们也可以结合以上步骤,一步创建的内部类实例
    OuterClass.InnerClass innerObject = new OuterClass().new InnerClass();
    // 同样我们现在可以调用内部类方法
    innerObject.display();
    }
    }

  • 相关阅读:
    DHCP配置实例
    upupw phpmyadmin写shell
    网络配置课学期总结
    c#写一个网站后台扫描器
    移位运算符
    JavaScript 事件
    JS自动爆炸案例
    生成树协议
    暴力操作节点
    为博客园添加统计访问量的工具
  • 原文地址:https://www.cnblogs.com/steel-chen/p/6808397.html
Copyright © 2011-2022 走看看