java常用类Day2

局部内部类

  • 定义在外部类方法中,作用范围和创建对象范围仅限于当前方法
  • 局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final
  • 限制类的使用范围
public class Demo03 {
    private String name="曹和宇";
    private int age=20;

    public void show(){//若是变为静态方法,则需要创建对象才能去调用外部类的属性
        //定义局部变量
        String address="西安";
//        Demo03 name = new Demo03();
//        Demo03 age = new Demo03();

        //局部内部类(和局部变量级别是相同的)
        class Inner{//前面不能再加任何的访问修饰符
            //局部内部类的属性
            private String phone="15484684631";
            private String email="3534663573@qq.com";

            public void show2(){
                //访问外部类的属性
                System.out.println(Demo03.this.name);//这样写较为规范
                System.out.println(age);
                //访问内部类属性
                System.out.println(this.phone);//较为规范
                System.out.println(email);
                //访问局部变量,jdk1.7要求局部变量必须是常量(final),jdk1.8后会自动添加final关键字
                System.out.println(address);
            }
        }
        Inner inner = new Inner();
        inner.show2();
    }
}

若show变为静态方法,则需要创建对象才能去调用外部类的属性。原因是静态方法不能访问非静态的成员,因为静态属性是类的属性,不是单个成员的属性

public class Test03 {
    public static void main(String[] args) {
        Demo03 outer = new Demo03();
        outer.show();//不会有任何输出结果,因为这里调用show方法只是起到了定义一个局部变量的作用,并未用到内部类,想要输出结果,则需要在方法内部创建内部类的对象
    }
}

测试类中创建的是外部类对象,这是因为局部内部类对象的作用范围只有在show方法中,在测试类中是new不出来的,所以要通过new外部类对象来调用show方法从而使用局部内部类。而要想使用局部内部类,还需要在方法内部创建内部类的对象

输出结果为

曹和宇
20
15484684631
3534663573@qq.com
西安

匿名内部类

  • 没有类名的局部内部类(一切特征都与局部内部类相同)
  • 必须继承一个父类或者实现一个接口
  • 定义类,实现类,创建对象的语法合并,只能创建一个该类的对象
  • 优点:减少代码量
  • 缺点:可读性较差

首先我们来实现一个简单的接口

//接口
public interface Demo04 {
    void service();
}
public class Mouse implements Demo04{

    @Override
    public void service() {
        System.out.println("连接电脑成功,鼠标开始工作");
    }
}
public class Test04 {
    public static void main(String[] args) {
        //创建接口类型的变量
        Demo04 usb=new Mouse();//多态,相当于用接口创建一个变量,我们来研究一个具体的实现类
        usb.service();
    }
}

输出结果为

连接电脑成功,鼠标开始工作

这个接口同样可以通过以下代码来实现

public class Test04 {
    public static void main(String[] args) {
        //创建接口类型的变量
//        Demo04 usb=new Mouse();//多态,相当于用接口创建一个变量,我们来研究一个具体的实现类
//        usb.service();
        //局部内部类
        class Key implements Demo04{//实现接口的局部内部类

            @Override
            public void service() {
                System.out.println("键盘连接成功");
            }
        }
        //使用局部类创建对象
        Demo04 usb=new Key();
        usb.service();
    }
}

相当于局部内部类直接充当了接口的实现类

输出结果为

键盘连接成功

还可以再次用匿名内部类优化一下

public class Test04 {
    public static void main(String[] args) {
        //创建接口类型的变量
//        Demo04 usb=new Mouse();//多态,相当于用接口创建一个变量,我们来研究一个具体的实现类
//        usb.service();
        //局部内部类
//        class Key implements Demo04{//实现接口的局部内部类

//            @Override
//            public void service() {
//                System.out.println("键盘连接成功");
//            }
//        }
        //使用局部类创建对象
//        Demo04 usb=new Key();
//        usb.service();

        //使用匿名内部类优化(相当于创建了一个局部内部类)
        Demo04 usb=new Demo04() {//这里不一定非得是接口,也可以是抽象类/父类
            @Override
            public void service() {
                System.out.println("连接电脑成功");
            }
        };
        usb.service();
    }
}

Object类

概述

  • 超类、基类,所有类的直接或间接父类,位于继承树的最顶层
  • 任何类,如没有书写extends显示某个类,都默认直接继承Object类,否则为间接继承
  • Object类中所定义的方法,是所有对象都具备的方法
  • Object类型可以存储任何对象
    • 作为参数,可接受任何对象
    • 作为返回值,可返回任何对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值