码迷,mamicode.com
首页 > 其他好文 > 详细

12.内部类

时间:2020-10-29 09:46:49      阅读:14      评论:0      收藏:0      [点我收藏+]

标签:static   err   创建对象   ice   开发   格式   内部类   实现   print   

内部类

内部类

内部类: 在一个类中定义一个类, 在类A的内部定义一个类B,类B就称为内部类

内部类格式

格式:

public class 类名 {
	修饰符 class 类名{
	}
}

范例

public class Outer {
	public class Inner {
	}
}

内部类访问特点:

  • 内部类可以直接访问外部类的成员, 包括私有
  • 外部类要访问内部类的成员, 必须要创建对象

Outer

package innerClass;

public class Outer {
    private int num = 20;
    public class Inner {
        public void show() {
            System.out.println(num);
        }
    }

    public void method() {
        Inner i = new Inner();
        i.show();
    }
}

成员内部类

按照内部类在类中定义的位置不同, 可以分为如下两种形式

  • 在类的成员位置: 成员内部类
  • 在类的局部位置: 局部内部类

成员内部类, 外接如何创建对象使用

  • 格式: 外部类名.内部类名 对象名= 外部类对象.内部类对象
  • 范例: Outer.Inner oi = new Outer().new Inner();

Outer

package innerClass.innerMember;

public class Outer {
    private int num = 10;
    /*
    public class Inner {
        public void show() {
            System.out.println(num);
        }
    }

     */

    // 私有内部类
    private class Inner {
        public void show() {
            System.out.println(num);
        }
    }

    public void method() {
        Inner i = new Inner();
        i.show();
    }
}

InnerDemo

package innerClass.innerMember;

public class InnerDemo {
    public static void main(String[] args) {
        /*
        // 公有的内部类
        Outer.Inner oi = new Outer().new Inner();
        oi.show();

         */

        Outer o = new Outer();
        o.method();
    }
}

局部内部类

局部内部类是在方法中定义的类, 在外界是无法直接使用, 需要在方法内部创建对象并使用.

该类可以直接访问外部类的成员, 也可以访问方法内的局部变量.

Outer

package innerClass.localInnerClass;

public class Outer {
    private int num = 30;
    public void method() {
        int num2 = 20;
        class Inner {
            public void show() {
                System.out.println(num);
                System.out.println(num2);
            }
        }

        Inner i = new Inner();
        i.show();
    }
}

Demo

package innerClass.localInnerClass;

public class Demo {
    // 测试类
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();
    }
}

匿名内部类

前提:存在一个类或者接口, 这里的类可以是具体类可以是抽象类

格式:

new 类名或者接口名() {
	重写方法;
}

范例

new Inter() {
	public void show() {
		/// ...
	}
}

本质: 是一个继承了该类或者实现了该接口的子类匿名对象

Outer

package innerClass.anonymousInnerClass;

public class Outer {
    public void method () {
        /*
        new Inter() {
            @Override
            public void show() {
                System.out.println("匿名内部类");
            }
        };
         */
        // show();

        /*
        new Inter() {
            @Override
            public void show() {
                System.out.println("匿名内部类");
            }
        }.show();  // 调用方法

        new Inter() {
            @Override
            public void show() {
                System.out.println("匿名内部类");
            }
        }.show();  // 调用第2方法

         */

        // 多次调用
        Inter i = new Inter() {
            @Override
            public void show() {
                System.out.println("匿名内部类");
            }
        };
        i.show();
        i.show();
        i.show();
    }
}

Inter

package innerClass.anonymousInnerClass;

public interface Inter {
    public void show();
}

Demo

package innerClass.anonymousInnerClass;

public class Demo {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();
    }
}

匿名内部类在开发中的使用

Jumpping

package innerClass.anonymousInnerClass.practice;

public interface Jumpping {
    void jump();
}

JumppingOperator

package innerClass.anonymousInnerClass.practice;

public class JumppingOperator {
    public void method (Jumpping j) {
        j.jump();
    }
}

Cat

package innerClass.anonymousInnerClass.practice;

public class Cat implements Jumpping {
    @Override
    public void jump() {
        System.out.println("猫可以跳跃");
    }
}

Dog

package innerClass.anonymousInnerClass.practice;

public class Dog implements Jumpping{
    @Override
    public void jump() {
        System.out.println("狗可以跳跃");
    }
}

Demo

package innerClass.anonymousInnerClass.practice;

public class Demo {
    public static void main(String[] args) {
        // 创建接口操作类对象, 调用method方法
        JumppingOperator jo = new JumppingOperator();
        Jumpping j = new Cat();
        jo.method(j);

        Jumpping d = new Dog();
        jo.method(d);

        System.out.println("--------");
        // 匿名内部类实现, 可以少写两个类
        jo.method(new Jumpping() {
            @Override
            public void jump() {
                System.out.println("猫可以跳高");
            }
        });

        jo.method(new Jumpping() {
            @Override
            public void jump() {
                System.out.println("狗可以跳高");
            }
        });
    }
}

12.内部类

标签:static   err   创建对象   ice   开发   格式   内部类   实现   print   

原文地址:https://www.cnblogs.com/ryxiong-blog/p/13890212.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!