zoukankan      html  css  js  c++  java
  • 01 语言基础+高级:1-4 接口与多态_day10【接口、多态】&&day11【final、匿名内部类】

    day10【接口、多态】

    接口
    三大特征——多态
    引用类型转换


    教学目标
    写出定义接口的格式
    写出实现接口的格式
    说出接口中成员的特点
    能够说出使用多态的前提条件
    理解多态的向上转型
    理解多态的向下转型


    day10_02_接口的定义基本格式

    day10_03_接口的抽象方法定义

    day10_04_接口的抽象方法使用

    day10_05_接口的默认方法定义

    day10_06_接口的默认方法使用

    day10_07_接口的静态方法定义

    day10_08_接口的静态方法使用

    day10_09_接口的私有方法定义

    /*
    问题描述:
    我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题。
    但是这个共有方法不应该让实现类使用,应该是私有化的。
    
    解决方案:
    从Java 9开始,接口当中允许定义私有方法。
    1. 普通私有方法,解决多个默认方法之间重复代码问题
    格式:
    private 返回值类型 方法名称(参数列表) {
        方法体
    }
    
    2. 静态私有方法,解决多个静态方法之间重复代码问题
    格式:
    private static 返回值类型 方法名称(参数列表) {
        方法体
    }
     */
    public interface MyInterfacePrivateA {
    
        public default void methodDefault1() {
            System.out.println("默认方法1");
            methodCommon();
        }
    
        public default void methodDefault2() {
            System.out.println("默认方法2");
            methodCommon();
        }
    
        private void methodCommon() {
            System.out.println("AAA");
            System.out.println("BBB");
            System.out.println("CCC");
        }
    
    }

    day10_10_接口的私有方法使用

    day10_11_接口的常量定义和使用

    day10_12_接口的内容小结

    day10_13_继承父类并实现多个接口

    day10_14_接口之间的多继承


    day10_15_多态的概述

    第4节 多态

     

    day10_16_多态的格式与使用

    day10_17_多态中成员变量的使用特点

    父类的成员变量,不能被@Override覆盖重写

    day10_18_多态中成员方法的使用特点

     

    day10_19_使用多态的好处

     

    day10_20_对象的向上转型

    day10_21_对象的向下转型

    day10_22_用instanceof关键字进行类型判断

     


    day11【final、匿名内部类】

    day11_01_final关键字概念与四种用法

     

    day11_02_final关键字用于修饰类 

    day11_03_final关键字用于修饰成员方法

     

    day11_04_final关键字用于修饰局部变量 

    day11_05_final关键字用于修饰成员变量

     

    第6节 权限修饰符

    day11_06_四种权限修饰符


     

    第7节 内部类 

    day11_07_内部类的概念与分类

     

    day11_11_局部内部类定义

     

    day11_12_局部内部类的final问题

     

    day11_13_匿名内部类

     

    day11_14_匿名内部类的注意事项

    package cn.bjut.day11.demo05;
    
    /*
    如果接口的实现类(或者是父类的子类)只需要使用唯一的一次,
    那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。
    
    匿名内部类的定义格式:
    接口名称 对象名 = new 接口名称() {
        // 覆盖重写所有抽象方法
    };
    
    对格式“new 接口名称() {...}”进行解析:
    1. new代表创建对象的动作
    2. 接口名称就是匿名内部类需要实现哪个接口
    3. {...}这才是匿名内部类的内容
    
    另外还要注意几点问题:
    1. 匿名内部类,在【创建对象】的时候,只能使用唯一一次。
    如果希望多次创建对象,而且类的内容一样的话,那么就需要使用单独定义的实现类了。
    2. 匿名对象,在【调用方法】的时候,只能调用唯一一次。
    如果希望同一个对象,调用多次方法,那么必须给对象起个名字。
    3. 匿名内部类是省略了【实现类/子类 名称】,但是匿名对象是省略了【对象名称】
    强调:匿名内部类和匿名对象不是一回事!!!
     */
    public class DemoMain {
    
        public static void main(String[] args) {
    //        MyInterface obj = new MyInterfaceImpl();
    //        obj.method();
    
    //        MyInterface some = new MyInterface(); // 错误写法!
    
            // 使用匿名内部类,但不是匿名对象,对象名称就叫objA
            MyInterface objA = new MyInterface() {
                @Override
                public void method1() {
                    System.out.println("匿名内部类实现了方法!111-A");
                }
    
                @Override
                public void method2() {
                    System.out.println("匿名内部类实现了方法!222-A");
                }
            };
            objA.method1();
            objA.method2();
            System.out.println("=================");
    
            // 使用了匿名内部类,而且省略了对象名称,也是匿名对象
            new MyInterface() {
                @Override
                public void method1() {
                    System.out.println("匿名内部类实现了方法!111-B");
                }
    
                @Override
                public void method2() {
                    System.out.println("匿名内部类实现了方法!222-B");
                }
            }.method1();
            // 因为匿名对象无法调用第二次方法,所以需要再创建一个匿名内部类的匿名对象
            new MyInterface() {
                @Override
                public void method1() {
                    System.out.println("匿名内部类实现了方法!111-B");
                }
    
                @Override
                public void method2() {
                    System.out.println("匿名内部类实现了方法!222-B");
                }
            }.method2();
        }
    
    }

    day11_15_类作为成员变量类型 

    day11_16_接口作为成员变量类型

    我们使用一个接口,作为成员变量,以便随时更换技能,这样的设计更为灵活,增强了程序的扩展性。
    接口作为成员变量时,对它进行赋值的操作,实际上,是赋给它该接口的一个子类对象。

    day11_17_接口作为方法的参数和或返回值 

    当接口作为方法的参数时,需要传递什么呢?当接口作为方法的返回值类型时,需要返回什么呢?对,其实都是它的
    子类对象。 ArrayList 类我们并不陌生,查看API我们发现,实际上,它是 java.util.List 接口的实现类。所
    以,当我们看见 List 接口作为参数或者返回值类型时,当然可以将 ArrayList 的对象进行传递或返回。

    =================================================================

    end

    部分内容来自于学习编程期间收集于网络的免费分享资源和工作后购买的付费内容。
  • 相关阅读:
    MobileIMSDK连接后频繁掉线重连,提示会话超时失效,对方非正常退出或网络故障
    Android+SpringBoot+Vue+高德地图实现后台查看车辆实时位置功能
    Vue中集成高德地图API实现定位与自定义样式信息窗体
    Java中对接钉钉API获取数据流程
    Java中集成极光推送实现给Android提送消息通知(附代码下载)
    Android中集成极光推送实现推送消息通知与根据别名指定推送附示例代码下载
    PostGresSQL简介与Windows上的安装教程
    信息系统项目管理师-知识产权、项目收尾、标准规范核心知识点思维脑图
    信息系统项目管理师-项目成熟度模型、量化项目管理核心知识点思维脑图
    信息系统项目管理师-招投标法、政府采购法核心知识点思维脑图
  • 原文地址:https://www.cnblogs.com/MarlonKang/p/11797713.html
Copyright © 2011-2022 走看看