Java基础第三天--内部类

形参和返回值

抽象类名作为形参和返回值

  • 方法的形参是抽象类名,其实需要的是该抽象类的子类对象
  • 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象

接口名作为形参和返回值

  • 方法的形象是接口名,其实需要的是该接口的实现类对象
  • 方法的返回值是接口名,其实返回的是该接口的实现类对象

内部类

内部类概述

  • 内部类:就是在一个类中定义一个类
  • 内部类的定义格式

格式:

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

范例:
java public class Outer{ public class Inner{ } }

成员内部类

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

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

成员内部类,外界如何创建对象使用呢?

  • 格式:外界类名.内部类名 对象名 = 外部类对象.内部类对象;
  • 范例:Outer.Inner oi = new Outer().newInner();
    //成员内部类
    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();
        }
    }
    //测试类
    public class InnerDemo {
        public static void main(String[] args){
//          Outer.Inner oi = new Outer().new Inner();
//          oi.show();//10

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

局部内部类

局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用该类可以直接访问外部类的成员,也可以访问方法内的局部变量

    //局部内部类
    public class Outer {
        private int num = 10;

        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();
    //测试类
    public class OuterDemo {
        public static void main(String[] args){
            Outer o = new Outer();
            o.method();
            //10
            //20
        }
    }

匿名内部类

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

  • 格式:
   new 类名或者接口名(){
       重写方法;
   }
  • 范例:
   new Inter(){
       public void show(){
       }
   }

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

    public class Outer {
        public void method() {
            /*
            new Inter() {
                @override
                public void show() {
                    System.out.println("匿名内部类");
                }
            }.show();
            */
            Inter i = new Inter(){
                @override
                public void show() {
                    System.out.println("匿名内部类");
                }
            };
            //多次调用
            i.show();
            i.show();
        }
    }
    public interface Inter {
        void show();
    }
    public class OuterDemo {
        public static void main(String[] args){
            Outer o = new Outer();
            o.method();
        }
    }

猜你喜欢

转载自www.cnblogs.com/energy-xjq/p/third_day.html