1.   在Java程序语言中,接口是对类的一种描述。例如Arrays类中sort方法声明可以对对象进行排序,但前提是对象所属的类必须实现Comparable接口。

public interface Comparable<T>
{
int compareTo(T other);
} public interface Comparable{
int compareTo(Object obj);
}

  接口中的所有方法自动地属于public,不必提供关键字。接口可以定义常量,但不能有自己的实例域,也不能实现方法。这些应该由实现接口的类来完成。

实现接口的方法:

  • 通过implements关键字将类声明为接口的实现。
  • 在类中实现接口的所有方法。并且所有方法都要写明public。

接口这名字起的真是形象。实际提供了一种对接方式。NB

2.   接口不是类,不能创造接口的实例。但是可以声明接口的变量。接口变量必须引用实现了接口的类的对象。可以用instanceof检查对象是否实现了某个接口。

3.  接口也可以被扩展。例如,假设有一个Moveable接口。

public interface Moveable(
void move (double x, double y);
} public interface Powered extends Moveable{
double milesPerGallon();
double SOPEED_LIMIT = 100;
}

接口中的数据,默认设为 public static final。

一个类只能继承于一个基类,但可以实现多个接口,class Student implements Comparable, Cloneable.

4.   克隆对象。

Object类的clone方法是protected。自定义的类不能直接使用该方法,需要重写为public。

* @return     a clone of this instance.
* @throws CloneNotSupportedException if the object's class does not
* support the {@code Cloneable} interface. Subclasses
* that override the {@code clone} method can also
* throw this exception to indicate that an instance cannot
* be cloned.
* @see java.lang.Cloneable
*/
protected native Object clone() throws CloneNotSupportedException;
* @see     java.lang.CloneNotSupportedException
* @see java.lang.Object#clone()
* @since JDK1.0
*/
public interface Cloneable {
}

值得注意的是如果在重写的clone方法中调用了Object的clone方法,即super.close()。那么这个类就要写明implements Cloneable,否则会抛CloneNotSupportException。Cloneable接口为标记接口,其中并没有定义方法。

深浅拷贝怎么分清,还是只要弄清楚变量和实例到底是怎样的关系,自然迎刃而解,可以看这个java基础一

5.  内部类

  

class TalkingClock
{
private int interval;
private boolean beep;
public TalkingClock(int interval, boolean beep){
this.interval = interval;
this.beep = beep;
}
public void start(){
ActionListener listener = new TimePrinter();
Timer t = new Timer(interval, listener);
t.start();
}
public class TimePrinter implements ActionListener{
public void actionPerformed(ActionEvent event){
Date now = new Date();
System.out.println("At the tone, the time is " + now);
if (beep) Toolkit.getDefaultToolkit().beep(); if(TalkingClock.this.beep) Toolkit.getDefaultToolkit().beep();// 使用外部类 的正规语法
}
}
}
public class InnerClassTest
{
public static void main(String[] args)
{
TalkingClock clock = new TalkingClock(1000, true);
clock.start();
TalkingClock.TimePrinter timePrinter = clock.new TimePrinter(); //通过外部类构造公共内部类 // keep program running until user selects "Ok"
JOptionPane.showMessageDialog(null, "Quit program?");
System.exit(0);
}
}
  • 内部类可以访问其外部类的实例域。内部类在构造时获得了其外部类对象的引用。也可以说是编译器修改了所有内部类的构造器 ,添加 了一个外围类的引用参数。当然这是不可见的。
  • 内部类可以声明为 私有的,这样对于其他类就是隐藏的。只有内部类 可以声明为private。
  • 使用外围类的正规语法: OuterClass.this; 那么同样可以这样使用内部类,outer.new InnerClass(constrution parameters);
  • 局部类,可以在方法或者代码块中定义一个内部类。这种局部内部类的作用域 被限定在声明这个类的块中。而且其不能用public和private声明。它对于这个块以外都是隐藏的
  • 局部类可以访问声明为final的局部变量。
  • 匿名内部类。语法
    new SuperType(construction parameters){
    inner class methods and data;
    }

    SuperType可以是一个接口,也可以是一个类。当是接口时就要实现 接口的方法。由于匿名类没有类名,所以它也不能有构造函数。当扩展 类的时候,构造参数传给基类的构造。当实现接口时,不能传递参数。

  • 在内部类不需要访问外围类对象的时候,应该 使用 静态内部类。 声明 在接口中的内部类会自动声明为public static.

Java 基础三、接口与内部类的更多相关文章

  1. JAVA基础之接口与内部类

    接口与内部类 目录 接口与内部类 1. Lambda表达式 1. 关于懒计算 2. Predicate接口 3. 关于方法引用 4. 关于构造器引用 5. 关于变量的作用域 2. 内部类 1. 局部内 ...

  2. Java基础十--接口

    Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...

  3. Java基础-面向接口(interface)编程

    Java基础-面向接口(interface)编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的“类 ...

  4. Java面试题总结之Java基础(三)

    1.JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try 块中可以抛出异常吗? 答:Java 通过面向对象的方法进行异常处理, ...

  5. 夯实Java基础(十一)——内部类

    1.内部类的概念 内部类顾名思义:将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.对于很多Java初学者来说,内部类学起来真的是一头雾水,根本理解不清楚是个什么东西,包括我自己(我太菜 ...

  6. 【Java基础】接口和抽象类之间的对比

    Java 中的接口和抽象类之间的对比 一.接口 Interface,将其翻译成插座可能就更好理解了.我们通常利用接口来定义实现类的行为,当你将插座上连接笔记本的三角插头拔掉,换成微波炉插上去的时候,你 ...

  7. Java抽象类、接口、内部类

    抽象类的概念: 1.Java中可以定义没有方法体的方法,还方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类: 2.如,shape类计算周长和面积的方法无法确定,那么就可以将这样 ...

  8. JAVA基础之接口

    接口 学习完框架之后,整合SSM过程中对于接口的认识加深了许多.根据<java核心技术>这本书进一步研究了一下. 1.概念 java核心技术是这样说的:"在Java程序设计中,接 ...

  9. Java基础之接口与抽象类及多态、内部类

    final关键字 被其修饰的类,不能被继承. 被其修饰的方法,不能被覆盖. 被其修饰的变量,是一个常量,不能被修改,所以定义时必须初始化(和C++的const类似). 一般有final,会搭配stat ...

随机推荐

  1. c++小游戏--五子棋

    大家好,我是芝麻狐! 这是我自制的小游戏,目前仅支持devc++. 如果你没有c++软件, 请打开网站GDB online Debugger | Compiler - Code, Compile, R ...

  2. Docker 好用的镜像

    Docker 官方镜像 1.个人博客空间wordpress 2.开源管理系统odoo 3.开发文档生成工具star7th/showdoc.(启动说明文档https://www.showdoc.com. ...

  3. linux常见命令(十二)

    sed/egrep将order.txt文件按行号展示出来,并删除第2,4行nl order.txt |sed '2,4d'将order.txt文件按行号展示出来,并删除第3行nl order.txt ...

  4. [NCTF2019]True XML cookbook-1|XXE漏洞

    1.打开题目之后和做的上一道:https://www.cnblogs.com/upfine/p/16534940.html题目界面一样,查看源代码等未发现有用信息,界面如下: 2.那就先按原来那道题的 ...

  5. 痞子衡嵌入式:MCUXpresso IDE下设置代码编译优化等级的几种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下设置代码编译优化等级的几种方法. 最近公司芯片设计团队正在开发一款全新的基于 Cortex-M33 内核的 ...

  6. vsftpd 操作手册 - 完整版

    vsftpd # 目录 - ftp 简介 - vsftpd 简介 - vsftpd 安装&卸载 - vsftpd 配置文件 - vsftpd 认证模板 - vsftpd 配置模板 # 目录详解 ...

  7. c# 异步进阶————channel [一]

    前言 该系列为异步编程的进阶篇,其实也不能这么讲.世界上本没有进阶篇,只能说是高级篇(高级篇不能说多高级,是对底层的封装的意思),只要是加深理解都是进阶. 本章先介绍一下channel. 正文 下面没 ...

  8. 简单的java代码审计

    描述 很简单的代码审计 java安全--Fastjson反序列化 java安全--SQL注入 Fastjson 反序列化 首先看一下配置文件,对于Maven项目,我们首先从pom.xml文件开始审计引 ...

  9. 【原创】K8S环境下研发如何本地调试?kt-connect使用详解

    K8S环境下研发如何本地调试?kt-connect使用详解 背景 注:背景有点啰嗦,讲讲一路走来研发本地调试的变化,嫌烦的可以直接跳过,不影响阅读. 2019年 我在的公司当时是个什么情况,只有两个J ...

  10. FreeSql 导入数据的各种场景总结 [C#.NET ORM]

    前言 导入数据这种脏活.累活,相信大家多多少少都有经历,常见的场景有: 同服务器从A表导数据到B表 批量导入新数据 批量新增或更新数据 跨服务器从A表导数据到B表 每种场景有自己的特点,我们一般会根据 ...