zoukankan      html  css  js  c++  java
  • Java的四种内部类

    项目结构

    接口

    public interface Vehicle {
        public String desc(String detail);
    }

    public class Car {
        private static String type = "汽车";
        private String desc;
        public Car(String desc) {
            this.desc = desc;
        }
        /*
         *  常规内部类:定义在外部类类体中,直接使用外部类的实例变量和实例方法。
         */
        class Ferrari{
            private String name;
            public Ferrari(String name) {
                this.name = name;
            }
            public String desc(){
                return desc + " : " + name;
            }
        }
        /*
         * 静态内部类:只能访问外部类的static成员,不能直接访问外部类的实例变量、实例方法
         */
        public static class Jaguar{
            private static String name = "捷豹";
            public String desc(){
                return type + " : " +name;
            }
        }
        /*
         *  局部内部类:在方法中定义,只能访问方法的final型实参、final型局部变量。
         *  方法结束后,方法的实参、局部变量的生命周期结束,而局部内部类的对象仍然存在。
         */
        public String manufacture(final String manufacturer){
            final String desc = "中型车";
            class Ford{
                private String name;
                public Ford(String name){
                    this.name = name;
                }
                public String getName() {
                    return name;
                }
            }
            Ford ford = new Ford("金牛座");
            return manufacturer + " : " + desc + " : " + ford.getName();
        }
        /*
         * 匿名内部类:
         * 1 继承一个类或实现一个接口。不能同时实现一个接口和继承一个类,也不能实现多个接口。
         * 2 不能定义构造方法。
         * 3 匿名内部类的定义和第一次使用都发生在同样一个地方。
         */
        private Vehicle vehicle = new Vehicle() {
            
            @Override
            public String desc(String detail) {
                return desc + " : " + detail;
            }
        };
        public Vehicle getVehicle() {
            return vehicle;
        }
    }

    运行

    public class Test {
        public static void main(String[] args) {
            Car car = new Car("独立悬挂");
            // 常规内部类
            Car.Ferrari ferrari = car.new Ferrari("Ferrari 488GTB");
            System.out.println(ferrari.desc());
            // 静态内部类
            Car.Jaguar jaguar = new Car.Jaguar();
            System.out.println(jaguar.desc());
            // 局部内部类
            System.out.println(car.manufacture("长安福特"));
            // 匿名内部类
            System.out.println(car.getVehicle().desc("本田第十代雅阁"));
        }
    }
  • 相关阅读:
    mac 10.9 安装 gevent
    flash builder4.7 for Mac升级AIRSDK详解
    重走java--Step 3
    重走java--Step 2
    重走java---Step 1
    web初学之MVC
    web初学之JavaBean
    微信公众号开发之开发模式的启用——学习笔记
    微信公众号开发之开通账号——学习笔记
    web初学之request,session与application
  • 原文地址:https://www.cnblogs.com/sea-breeze/p/7002401.html
Copyright © 2011-2022 走看看