黑马程序员Java基础入门(十五)内部类&形参和返回值

目录

一、形参和返回值

1. 类名作为形参和返回值

2. 抽象类名作为形参返回值

3. 接口名作为形参和返回值

二、内部类

1.内部类概述

 2.成员内部类

3.局部内部类

4.匿名内部类

5.匿名内部类在开发终端使用

5.1 需求

5.2 举例


一、形参和返回值

1. 类名作为形参和返回值

方法的形参是类名,其实需要的是该类的对象。

方法的返回值是类名,其实返回的是该类的对象。

2. 抽象类名作为形参返回值

方法的形参是抽象类名,其实需要的是该抽象类的子类对象。

方法的返回值是抽象类名,其实返回的是该抽象类的子类对象。

3. 接口名作为形参和返回值

方法的形参是接口名,其实需要的是该接口的实现类对象。

方法的返回值是接口名,其实返回的是该接口的实现类对象。

二、内部类

1.内部类概述

内部类就是在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类。

内部类的定义格式

格式:

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

范例:

public class Outer{
    public class Inner{
    }
}

内部类的访问特点:

内部类可以直接访问外部类的成员,包括私有。

外部类要访问内部类的成员,必须创建对象。

没创建对象导致报错 

创建内部类对象后可以使用内部类对象

 2.成员内部类

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

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

在类的局部位置:局部位置类

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

格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象

范例:Outer.Inner oi = new Outer().new Inner();

但此方式我们一般不用,因为他只对于public的类才有效果,但一般我们为了防止代码安全性,我们会使用private类型。

对于private类型的内部类我们应该怎么做呢?

我们可以创建一个public方法,在方法中创建内部类对象和调用内部类中的方法。这时外界只需创建外部类对象调用这个public方法就可以轻松调用里面的内部类了。

如外部类:

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

测试类:

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

测试类运行后输出为10,说明调用成功。

3.局部内部类

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

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

如外部类:

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 test {
    public static void main(String[] args) {
        Outer oi = new Outer();
        oi.method();
    }
}

测试类运行后输出10和20说明调用成功

4.匿名内部类

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

格式:

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

范例:

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

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

举例:

已实现的接口:

 匿名内部类

 测试类:

 控制台输出匿名内部类说明调用成功

如果我们想多次调用匿名内部类我们可以将内部类多次复制,但多次复制会使代码冗余,我们应该怎么做呢?

我们发现匿名内部类是实体对象,那我们可不可以用一个Inter来接受?

操作后,我们发现确实可以。如:

 这样我们就可以用i这个实体对象进行多次的show()方法调用

5.匿名内部类在开发终端使用

5.1 需求

5.2 举例

跳高接口:

 接口操作类:

 Cat类实现接口:

Dog类实现接口:

 测试类:

 我们发现猫和狗只用了一次就不用了,但是却专门创建了一个类,如果动物很多会让代码效率很低,所以我们需要用到刚才所学的匿名内部类

我们直接将测试类改为:

 这样我们就不用创建前面的Cat和Dog类了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值