• Java学习笔记15(面向对象八:匿名对象、内部类)


    匿名对象:

    是指创建对象的时候,只有创建对象的语句,却没有把对象地址值赋给某个变量

    创建一个普通对象:

    Person p = new Person();

    创建一个匿名对象:

    new Person();

    注意:

    1.匿名对象只能使用一次

    2.匿名对象可以作为参数传递

    3.匿名对象可以当作方法的返回值

    示例:

    public class Demo {
        public static Person getPerson(){
            //普通方式
            //Person p = new Person();    
            //return p;
            
            //匿名对象作为方法返回值
            return new Person(); 
        }
        
        public static void method(Person p){}
    }
    
    public class Test {
        public static void main(String[] args) {
            //调用getPerson方法,得到一个Person对象
            Person person = Demo.getPerson();
            
            //调用method方法
            Demo.method(person);
            //匿名对象作为方法接收的参数
            Demo.method(new Person());
        }
    }

    内部类:

    在类的内部定义类

    什么时候需要呢?比如,一个汽车,包含发动机,发动机就可以用内部类来描述

    内部类的分类:成员内部类,局部内部类

    成员内部类的建立和调用示例:

    public class Outer {
        private int a = 1;
        //内部类可以使用外部类成员,包括私有
        //外部类无法直接使用内部类变量,必须建立内部类对象
        class Inner{
            public void inner(){
                System.out.println("内部类方法"+a);
            }
        }
    }
    public class Test {
        public static void main(String[] args) {
            //内部类调用格式:
            Outer.Inner in = new Outer().new Inner();
            in.inner();
        }
    }

    同名变量的调用问题:

    public class Outer {
        int i = 1;
        class Inner{
            int  i =2;
            public void inner(){
                int  i = 3;
                System.out.println(i);//3
                System.out.println(this.i);//2
                System.out.println(Outer.this.i);//1
            }
        }
    }

    局部内部类:

    把一个类写在了一个方法里面

    调用方法相对复杂

    示例:

    public class Outer {
        public void out(){
            class Inner{
                public void inner(){
                    System.out.println("局部内部类方法");
                }
            }
            Inner inner = new Inner();
            inner.inner();
        }
    }
    public class Test {
        public static void main(String[] args) {
            new Outer().out();
        }
    }

    内部类的实际使用:

    匿名内部类:

    临时定义某一指定类型的子类,定义后立即创建刚刚定义的这个子类对象

    示例:

    public interface Smoking {
        public abstract void smoking();
    }
    public class Test {
        public static void main(String[] args) {
            //固定格式
            //实际上创建了接口的实现类,重写方法
            //这里也可以这样写Smoking s = new Smoking() {};
            //然后s.方法调用
            new Smoking() {
                public void smoking() {
                    System.out.println("人在吸烟");
                }
            }.smoking();
            //注意这个分号
        }
    }
  • 相关阅读:
    spring jdbctemplate 集成duckdb docker 镜像
    GLIBCXX_3.4.x 问题解决
    spring jdbctemplate 集成duckdb
    spring-boot-starter-data-jdbc Cannot determine a dialect Please provide a Dialect
    kotlin 学习 三 maven 集成+java 互调用
    kotlin 学习 二 命令行模式运行
    kotlin 学习 一 环境搭建
    pt-ioprofile io 瓶颈分析工具
    zombodb 3000 alpha1发布
    openfeign+retronfit http 访问
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/8249771.html
Copyright © 2020-2023  润新知