面向对象编程(三)

目录

一、接口

1、接口概述、特点

1)、接口的定义

 2)、接口的特点

3)、接口

2、接口的基本使用:被实现

1)、接口的用法

2)、接口实现的注意事项

3、补充知识:接口与接口的多继承

1)、基本小结

2)、接口多继承的作用

4、补充知识:JDK8开始接口新增的方法

1)、默认方法

2)、静态方法

3)、私有方法

5、补充知识:使用接口的注意事项

1)、注意事项

二、内部类

1、内部类概述

1)、内部类

2)、内部类的使用场景

3)、基本作用

4)、内部类的分类

2、内部类之一:静态内部类

1)、静态内部类的概念

2)、静态内部类创建对象的格式

3)、静态内部类的访问拓展

3、内部类之二:成员内部类

1)、成员内部类的概念

2)、成员内部类创建对象的格式

3)、成员内部类的访问拓展

4)、成员内部类-面试笔试题

4、内部类之三:局部内部类

1)、局部内部类的概念

5、部类之四:匿名内部类概述

1)、匿名内部类的概念及总结

2)、格式

3)、特点总结

6、匿名内部类常见使用形式

1)、案例

2)、代码

4)、结果

5)、使用总结

7、匿名内部类真实使用场景演示

1)、案例

2)、代码

3)、结果

4)、使用总结

三、常用API

1、API概述

2、Object类:toString方法

1)、Object类的作用

2)、Object类的常用方法

3)、Object的toString方法

4)、问题引出

5)、toString存在的意义

3、Object类:equals方法

1)、Object的equals方法

2)、问题思考

3)、equals存在的意义

4、Objects

1)、Objects概述

2)、Objects的常见方法

3)、源码分析

5、StringBuilder

1)、StringBuilder概述

2)、StringBuilder 构造器

3)、StringBuilder常用方法

4)、案例

5)、分析

6)、代码

7)、结果 

6、Math

1)、Math的常用方法

7、System

1)、System的常用方法

8、BigDecimal

1)、BigDecimal的常用方法


一、接口

1、接口概述、特点

1)、接口的定义

接口的格式如下:

 2)、接口的特点

JDK8之前接口中只能是抽象方法和常量,没有其他成分了。

接口不能实例化。

接口中的成员都是public修饰的,写不写都是,因为规范的目的是为了公开化。

3)、接口

接口也是一种规范。

2、接口的基本使用:被实现

1)、接口的用法

接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子

类。

 从上面可以看出,接口可以被类单实现,也可以被类多实现。

2)、接口实现的注意事项

一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类。

3、补充知识:接口与接口的多继承

1)、基本小结

类和类的关系:单继承。

类和接口的关系:多实现。

接口和接口的关系:多继承,一个接口可以同时继承多个接口。

2)、接口多继承的作用

规范合并,整合多个接口为同一个接口,便于子类实现。

4、补充知识:JDK8开始接口新增的方法

1)、默认方法

类似之前写的普通实例方法:必须用default修饰。

默认会public修饰。需要用接口的实现类的对象来调用。

2)、静态方法

默认会public修饰,必须static修饰。

注意:接口的静态方法必须用本身的接口名来调用。

3)、私有方法

就是私有的实例方法:,必须使用private修饰,从JDK 1.9才开始有的。

只能在本类中被其他的默认方法或者私有方法访问。

 注意:JDK8新增的3种方法我们自己在开发中很少使用,通常是Java源码涉及到的,我们需要理解、识别语法、明白调用关系即可。

5、补充知识:使用接口的注意事项

1)、注意事项

接口不能创建对象

一个类实现多个接口,多个接口的规范不能冲突。

一个类实现多个接口,多个接口中有同样的静态方法不冲突。

一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法,默认用父类的。

一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。

一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承。

二、内部类

1、内部类概述

1)、内部类

内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)。

2)、内部类的使用场景

场景:当一个事物的内部,还有一个部分需要一个完整的结构进行描述时。

3)、基本作用

内部类通常可以方便访问外部类的成员,包括私有的成员。

内部类提供了更好的封装性,内部类本身就可以用private ,protectecd等修饰,封装性可以做更多控制。

4)、内部类的分类

静态内部类[了解]

成员内部类(非静态内部类) [了解]

局部内部类[了解]

匿名内部类(重点)

2、内部类之一:静态内部类

1)、静态内部类的概念

有static修饰,属于外部类本身。

它的特点和使用与普通类是完全一样的,类有的成分它都有,只是位置在别人里面而已。

2)、静态内部类创建对象的格式

3)、静态内部类的访问拓展

1、静态内部类中是否可以直接访问外部类的静态成员?

        可以,外部类的静态成员只有一份可以被共享访问。

2、静态内部类中是否可以直接访问外部类的实例成员?

        不可以的,外部类的实例成员必须用外部类对象访问。

3、内部类之二:成员内部类

1)、成员内部类的概念

无static修饰,属于外部类的对象。

JDK16之前,成员内部类中不能定义静态成员,JDK 16开始也可以定义静态成员了。

2)、成员内部类创建对象的格式

3)、成员内部类的访问拓展

1、成员内部类中是否可以直接访问外部类的静态成员?

        可以,外部类的静态成员只有一份可以被共享访问。

2、成员内部类的实例方法中是否可以直接访问外部类的实例成员?

        可以的,因为必须先有外部类对象,才能有成员内部类对象,所以可以直接访问外部类对象的实例成员。

4)、成员内部类-面试笔试题

写出结果:

 注意:在成员内部类中访问所在外部类对象 ,格式:外部类名.this。

4、内部类之三:局部内部类

1)、局部内部类的概念

局部内部类放在方法、代码块、构造器等执行体中。

局部内部类的类文件名为: 外部类$N内部类.class。

5、部类之四:匿名内部类概述

1)、匿名内部类的概念及总结

本质上是一个没有名字的局部内部类。

作用:方便创建子类对象,最终目的是为了简化代码编写。

2)、格式

 

3)、特点总结

匿名内部类是一个没有名字的内部类,同时也代表一个对象。

匿名内部类产生的对象类型,相当于是当前new的那个的类型的子类类型。

6、匿名内部类常见使用形式

1)、案例

某个学校需要让老师,学生,运动员一起参加游泳比赛

2)、代码

 

public static void main(String[] args) {
        Swimming s = new Swimming() {
            @Override
            public void swim() {
                System.out.println("学生比赛!");
            }
        };
        go(s);

        System.out.println("-----------------------------");

        go(new Swimming() {
            @Override
            public void swim() {
                System.out.println("老师比赛!");
            }
        });

        System.out.println("-----------------------------");

         go(new Swimming() {
            @Override
            public void swim() {
                System.out.println("运动员比赛!");
            }
        });
    }



    /**
        学生,老师,运动员可以一起参加比赛
     */
    public static void go(Swimming s){
        System.out.println("开始");
        s.swim();
        System.out.println("结束");
    }



interface Swimming{
    void swim();
}

4)、结果

5)、使用总结

匿名内部类可以作为一个对象,直接传输给方法。

7、匿名内部类真实使用场景演示

1)、案例

给按钮绑定点击事件

2)、代码

public static void main(String[] args) {
        //1、创建窗口
        JFrame win = new JFrame("登录界面");
        JPanel panel = new JPanel();
        win.add(panel);

        //2、创建一个按钮对象
        JButton btn = new JButton("登录");

        //注意:讲解匿名内部类的使用
//        btn.addActionListener(new ActionListener() {
//            @Override
//            public void actionPerformed(ActionEvent e) {
//                    JOptionPane.showMessageDialog(win,"点我一下,说明爱我");
//            }
//        });

        btn.addActionListener(e -> JOptionPane.showMessageDialog(win,"点我一下,说明爱我"));

        //3、把按钮对象添加到桌布上展示
        panel.add(btn);

        //4、展示窗口
        win.setSize(400,300);
        win.setLocationRelativeTo(null);
        win.setVisible(true);
    }

3)、结果

4)、使用总结

匿名内部类通常是在开发中调用别人的方法时,别人需要我们写的时候才会定义出来使用。

将来:匿名内部类还可以实现进一步的简化代码。

三、常用API

1、API概述

1)、概述

API(Application Programming interface)  应用程序编程接口。

简单来说:就是Java帮我们已经写好的一些方法,我们直接拿过来用就可以了。

2、Object类:toString方法

1)、Object类的作用

一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类。

Object作为所有类的父类,提供了很多常用的方法给每个子类对象拿来使用。

2)、Object类的常用方法

方法名

说明

public String toString()

默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址

public boolean equals(Object o)

默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false

3)、Object的toString方法

方法名

说明

public String toString()

默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址

4)、问题引出

开发中直接输出对象,默认输出对象的地址其实是毫无意义的。

开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息。

5)、toString存在的意义

父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息!!

3、Object类:equals方法

1)、Object的equals方法

方法名

说明

public boolean equals(Object o)

默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false

2)、问题思考

直接比较两个对象的地址是否相同完全可以用“==”替代equals。

同时,开发中很多业务情况下,更想判断2个对象的内容是否一样。

3)、equals存在的意义

为了被子类重写,以便子类自己来定制比较规则(比如比较对象内容)。

4、Objects

1)、Objects概述

Objects是一个工具类,提供了一些方法去完成一些功能。

使用Objects的equals方法在进行对象的比较会更安全。

2)、Objects的常见方法

方法名

说明

public static boolean equals(Object a, Object b)

比较两个对象的,底层会先进行非空判断,从而可以避免空指针异常。再进行equals比较

public static boolean isNull(Object obj) 

判断变量是否为null ,为null返回true ,反之

3)、源码分析

5、StringBuilder

1)、StringBuilder概述

StringBuilder是一个可变的字符串的操作类,我们可以把它看成是一个对象容器。

使用StringBuilder的核心作用:操作字符串的性能比String要更高(如拼接、修改等)。

2)、StringBuilder 构造器

名称

说明

public StringBuilder()

创建一个空白的可变的字符串对象,不包含任何内容

public StringBuilder(String str)

创建一个指定字符串内容的可变字符串对象

3)、StringBuilder常用方法

方法名称

说明

public StringBuilder append(任意类型)

添加数据并返回StringBuilder对象本身

public StringBuilder reverse()

将对象的内容反转

public int length()

返回对象内容长度

public String toString()

通过toString()就可以实现把StringBuilder转换为String

4)、案例

设计一个方法用于输出任意整型数组的内容,要求输出成如下格式:

5)、分析

1、定义一个方法,要求该方法能够接收数组,并输出数组内容。

2、定义一个静态初始化的数组,调用该方法,并传入该数组。

6)、代码

public static void main(String[] args) {
       int[] arr = null;
        System.out.println(toString(arr));

        int[] arr2 = {};
        System.out.println(toString(arr2));

        int[] arr3 = {11,22,33,44};
        System.out.println(toString(arr3));
    }
    /**
     1、定义方法接受任意数组,返回数组内容格式
     */
    public static String toString(int[] arr){
        if (arr != null){
            //2、开始正式拼接
            StringBuilder s = new StringBuilder("[");
            for (int i = 0; i < arr.length; i++) {
                s.append(arr[i]).append(arr.length - 1 == i ? "" : ",");
            }
            s.append("]");
            return s.toString();
        }else {
            return null;
        }
    }

7)、结果 

6、Math

1)、Math的常用方法

7、System

1)、System的常用方法

8、BigDecimal

1)、BigDecimal的常用方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁༺๑小王不是程序员๑༻꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值