Java知识(七)1.传递与返回值。2.内部类(成员内部类,局部内部类(匿名内部类))。

1.传递与返回值

1.形式参数是基本类型要的是什么?是类名要的是什么?是抽象类名要的是什么?是接口名要的是什么?
  基本类型要的是 byte,short,int,long,float,double,boolean, char;类名要的是该类的对象;抽象类名要的是该抽象类对象的子类对象;接口名要的是该接口的子类对象。
2.返回值类型是基本类型返回的是什么?是类名返回的是什么?是抽象类名返回的是什么?是接口名返回的是什么?
  基本类型返回的是byte,short,int,long,float,double,boolean, char;类名返回的是该类的对象;抽象类返回的是该抽象类对象的子类对象;接口名返回的是该接口的子类对象。

2.内部类

内部类概述:
  把类定义在其他类的内部,这个类就被称为内部类。
举例:
  在类A中定义了一个类B,类B就是内部类。
内部类访问特点:
  (1)内部类可以直接访问外部类的成员,包括私有。
  (2)外部类要访问内部类的成员,必须创建对象。
按照内部类位置分类:
  成员位置:在成员位置定义的类,被称为成员内部类。
  局部位置:在局部位置定义的类,被称为局部内部类。
匿名内部类:
  就是局部内部类的简化写法。
<1>成员内部类
例:

class Outer {
    
    
    String s = "Outer";

    public static void main(String[] args) {
    
    
        new Outer().new Inner();
    }

    Outer() {
    
    
        System.out.println(s);
    }

    class Inner {
    
    
        String s = "Inner";

        Inner() {
    
    
            System.out.println(s);
        }
    }
}

运行结果为:
在这里插入图片描述
<2>局部内部类
局部内部类访问局部变量的问题
 (1)可以直接访问外部类的成员
 (2)可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能
 (3)局部内部类访问局部变量必须用final修饰
  因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量。为了让数据还能继续被使用,就用fianl修饰,这样,在堆内存里面存储的其实是一个常量值。
JDK1.8之后,final会默认加上,不用手动去加。
例:

class Outer {
    
    
    final String s1 = "外部类变量";

    public void method() {
    
    
        String s2 = "内部类变量";
        class Inner {
    
    
            final public void innerMethod() {
    
    
                int x = 20;
                System.out.println(s1);
                System.out.println(x);
                System.out.println(s2);
            }
        }
        Inner inner = new Inner();
        inner.innerMethod();
    }

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

运行结果为:
在这里插入图片描述
<3>匿名内部类
(1)通过接口的方式创建匿名内部类
例:

interface Inter {
    
    
    public abstract void show();
}

//在外部类Outer的method()方法中,创建匿名内部类
public class Outer {
    
    
    interface Inter {
    
    
        public abstract void show();
    }

    public void Method() {
    
    
        new Inter() {
    
    
            @Override
            public void show() {
    
    
                System.out.println("通过接口的方式创建匿名内部类");
            }
        }.show();
    }

    public static void main(String[] args) {
    
    
        new Outer().Method();
    }
}

运行结果为:
在这里插入图片描述
(2)通过抽象类的方式创建匿名内部类
例:

abstract class AbstractClass {
    
    
    public abstract void show();
}
//在外部类Outer的method()方法中,创建匿名内部类
public class Outer {
    
    
    public void Method() {
    
    
        new AbstractClass() {
    
    
            @Override
            public void show() {
    
    
                System.out.println("通过抽象类的方式创建匿名内部类");
            }
        }.show();
    }

    public static void main(String[] args) {
    
    
        new Outer().Method();
    }
}

运行结果为:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45631296/article/details/102706186