• 面向对象---内部类浅谈


    成员内部类:

    /*

    * A:内部类概述

             类中的类

    * B:内部类访问特点

             * a:内部类可以直接访问外部类的成员,包括私有。

             * b:外部类要访问内部类的成员,必须创建对象。

             * 外部类名.内部类名 对象名 = 外部类对象.内部类对象;

    */

    (1)如何调用内部类方法

    class Demo1_InnerClass {
        public static void main(String[] args) {
            //外部类名.内部类名 对象名 = 外部类对象.内部类对象;
            Outer.Inner oi = new Outer().new Inner();
            oi.method();
        }
    }
    
    class Outer {
        public int num = 10;
        private int a = 20;
    //注意内部类的位置和外部类成员变量的位置并列,可联想怎么调用外部类成员变量来调用内部类
    
        class Inner {
            public void method() {
                System.out.println(num);
                System.out.println(a);
            }
        }
    }

    (2)若内部类私有,(其实和外部类成员变量私有一回事儿,只需在本类中提供公共方法即可。)

    eg.

    class Demo2_InnerClass {
        public static void main(String[] args) {
            Outer o = new Outer();
            o.print();    
        }
    }
    
    class Outer {
        private int num = 10;
        private class Inner {
            public void method() {
                System.out.println(num);
            }
        }
    
        public void print() {
            Inner i = new Inner();
            i.method();
        }
    }

    静态内部类:

    (1)如何调用静态内部类方法呢?

    外部类名.内部类名 对象名 = 外部类名.内部类对象;

      Outer.Inner oi = new Outer.Inner();

    如果内部类方法为静态,可直接通过类名调用

    eg.

    class Demo1_InnerClass {
        public static void main(String[] args) {
            //外部类名.内部类名 对象名 = 外部类名.内部类对象;
            Outer.Inner oi = new Outer.Inner();
            oi.method();
            //调用静态内部类中的静态方法,通过类名调用。
            Outer.Inner2.method();
        }
    }
    
    
    class Outer {
        static int num = 10;
        static class Inner {
            public void method() {
                System.out.println("Hello World");
            }
        }
        
        static class Inner2 {
            public static void method() {
                System.out.println("static Hello World");
            }
        }
    }

    (2)如何调用成员变量

    eg. 要求:使用已知的变量,在控制台输出30,20,10。

    class Test1_InnerClass {
        public static void main(String[] args) {
            Outer.Inner oi = new Outer().new Inner();
            oi.show();
        }
    }
    
    class Outer {
        public int num = 10;
        class Inner {
            public int num = 20;
            public void show() {
                int num = 30;
                System.out.println(num);
                //System.out.println(Inner.this.num);
                //所属类Inner可以省略
                System.out.println(this.num);
                System.out.println(Outer.this.num);
            }
        }
    }

    复习一下,this关键字调用本类的成员变量。

    局部内部类

    如何调用局部内部类方法?

    eg

    class Demo1_InnerClass {
        public static void main(String[] args) {
            Outer o = new Outer();
            o.method();
        }
    }
    //局部内部类
    class Outer {
        public void method() {
            class Inner {
                public void print() {
                    System.out.println("Hello World");
                }
            }
    
            Inner i = new Inner();   
            i.print();
        }
    }

    在外部类的方法(method())里面创建内部类对象后,直接在主方法里创建外部类对象调用method()即可。

    匿名内部类

    匿名内部类(局部内部类的一种),前提存在一个类或者接口(匿名内部类必须和类或者接口产生关系),这里的类可以是具体类,也可以是抽象类。

    格式:

            new 类名或者接口名(){
                重写方法;
            };  //注意分号

    使用场景:(1)只创建某类的一个对象(2)只是用一次(3)只针对重写一个方法时使用

    eg不使用匿名内部类:

    class Demo1_InnerClass {
        public static void main(String[] args) {
            Outer o = new Outer();
            o.method();
        }
    }
    
    interface Inter{
        public void print();//abstract可以省略
    }
    
    class Outer{
        class Inner implements Inter{
            public void print() {
                System.out.println("Hello World");
            }
        }
    
        public void method(){
            Inner i = new Inner();
            i.print();
            //等价于下面的代码,通过匿名对象调用方法。
            //new Inner().print();  
        }
    }

    eg使用匿名内部类:

    class Demo1_InnerClass {
        public static void main(String[] args) {
            Outer o = new Outer();
            o.method();
        }
    }
    
    interface Inter{
        public void print();//abstract可以省略
    }
    
    class Outer {
        public void method() {
            new Inter() {            //代表实现了Inter接口,等同于是Inter的子类对象
                public void print() {
                    System.out.println("Hello word!");
                }
            }.print();
        }
    }

    敬请指正.........

  • 相关阅读:
    jQuery教程
    AJAX请求 $.ajax方法的使用
    smarty block_function
    smarty
    位运算版本的交换两数
    提取字符串中的数字
    vue地址插件多级联动自适应 + github地址
    vue插件
    网页title旁边的小图片
    二十三种设计模式[14]
  • 原文地址:https://www.cnblogs.com/songzongyuan-java/p/9325787.html
Copyright © 2020-2023  润新知