当前位置 : 主页 > 编程语言 > java >

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(2)

来源:互联网 收集:自由互联 发布时间:2022-07-13
6.1.1 接口的特性 1 不能使用new关键字进行实例化 2 可以声明接口类型对象 3 可以使用instanceof检查对象对应的类是否实现了特定的接口 4 接口间支持扩展,支持多继承 5 JDK1.8之前不支持静


6.1.1 接口的特性

1 不能使用new关键字进行实例化

2 可以声明接口类型对象

3 可以使用instanceof检查对象对应的类是否实现了特定的接口

4 接口间支持扩展,支持多继承

5 JDK1.8之前不支持静态方法,不能有方法体;JDK1.8开始,接口可以有默认方法以及静态方法

6 所有接口中的全局变量,默认都使用public static final 修饰

public class Main {
public static void main(String[] args){
Main solution = new Main();
//1 不能使用new关键字进行实例化
//提示:A is abstract,cannot be instantiated
//A a = solution.new A();
//2 可以声明接口类型对象
A a;
D d = solution.new D();
System.out.println(solution.checkInstance(d));
d.test();
C.staticTest();
//6.所有接口中的全局变量,默认都使用public static final 修饰
System.out.println(C.a);
//C.a = 5;//cannot assign a value to final variable 'a'
}

private boolean checkInstance(Object o){
//3 可以使用instanceof检查对象对应的类是否实现了特定的接口
return o instanceof A;
}

public class D implements C{

}

public interface A{

}

public interface B{

}

//4 接口间支持扩展,支持多继承
public interface C extends A,B{
int a = 5;
//5 JDK1.8之前不支持静态方法,不能有方法体;JDK1.8开始,接口可以有默认方法以及静态方法
default void test(){
System.out.println("test");
}

static void staticTest(){
System.out.println("staticTest");
}
}
}

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(2)_java

6.1.2 接口与抽象类

问:为什么要设计接口?

答:因为类不支持多重继承,但是接口支持,接口可以用于补充Java没有多继承的缺失。比如在形状分类中,正方形既属于菱形,也属于长方形,它同时具有两种形状的特性,是对于菱形和长方形两者的扩展,如果不使用接口,必然在继承过程中,只能选取继承菱形和长方形中的一种特性,另一种只能自己进行补足。部分代码无法复用,继承关系无法完全关联。

6.2 对象克隆

克隆方法的使用:

  • 实现Clonable接口
  • 覆盖Object类的clone方法,并扩展访问权限为public
  • 调用父类的clone方法
  • public class Main {
    public static void main(String[] args) throws CloneNotSupportedException, InterruptedException {
    Main solution = new Main();
    T t = solution.new T();
    t.a = 3;
    t.sb.append("123");
    T copy = t.clone();
    System.out.print(t);
    System.out.println(copy);

    copy.a = 7;
    copy.sb.append("456");
    System.out.print(t);
    System.out.println(copy);
    }

    public class T implements Cloneable{
    int a = 5;
    StringBuilder sb = new StringBuilder();

    @Override
    public T clone() throws CloneNotSupportedException {
    return (T) super.clone();
    }

    @Override
    public String toString() {
    return "T{" +
    "a=" + a +
    ", sb=" + sb.toString() +
    '}';
    }
    }
    }

    《Java 核心技术 卷1》 笔记 第六章 接口和内部类(2)_linq_02

    浅拷贝特点:

    基本类型可完美拷贝,引用类型指向了同一个对象,修改拷贝对象属性,会影响原对象属性

    public class Main {
    public static void main(String[] args) throws CloneNotSupportedException, InterruptedException {
    Main solution = new Main();
    T t = solution.new T();
    t.a = 3;
    t.sb.append("123");
    T copy = t.clone();
    System.out.print(t);
    System.out.println(copy);

    copy.a = 7;
    copy.sb.append("456");
    System.out.print(t);
    System.out.println(copy);
    }

    public class T implements Cloneable{
    int a = 5;
    StringBuilder sb = new StringBuilder();

    @Override
    public T clone() throws CloneNotSupportedException {
    T t = (T) super.clone();
    t.sb = new StringBuilder(sb);
    return t;
    }

    @Override
    public String toString() {
    return "T{" +
    "a=" + a +
    ", sb=" + sb.toString() +
    '}';
    }
    }
    }

    子类处理引用类型,复制内容并创建新的对象,这个过程叫做深拷贝

    《Java 核心技术 卷1》 笔记 第六章 接口和内部类(2)_p2p_03

    标记接口:只标识类型,无实际方法声明的接口

    标记接口事实上是非常常用的,比如在生产环境中就遇到过使用IVersion标识类型进行插入前需要进行版本检查,使用工具类对于实现IVersion接口的对象,统一进行拦截检查。

    If(a instanceof IVersion){
    //版本检查
    }

      系列内容:

    《Java 核心技术 卷1》 笔记:第一章 Java程序设计概述

    《Java 核心技术 卷1》 笔记:第二章 Java程序设计环境

    《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(1)

    《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(2)

    《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(3)

    《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(4)

    《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(5)

    《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(6)

    《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参

    《Java 核心技术 卷1》 笔记 第四章:类与对象

    《Java 核心技术 卷1》 笔记 第四章:类与对象(2) GregorianCalendar 与 类的基本组成

    《Java 核心技术 卷1》 笔记 第四章:类与对象(3) 构造器全局私有方法

    《Java 核心技术 卷1》 笔记 第四章:类与对象(4) 静态字段+静态方法+工厂方法

    《Java 核心技术 卷1》 笔记 第四章:类与对象(5) 形参与实参 构造器的默认值与默认构造

    《Java 核心技术 卷1》 笔记 第四章:类与对象(6) 构造器调用与初始化块

    《Java 核心技术 卷1》 笔记 第四章:类与对象(7) 注释、JavaDoc与类设计

    《Java 核心技术 卷1》 笔记 第五章 继承

    《Java 核心技术 卷1》 笔记 第五章 继承(2)

    《Java 核心技术 卷1》 笔记 第五章 继承(3)

    《Java 核心技术 卷1》 笔记 第五章 继承(4)equals方法

    《Java 核心技术 卷1》 笔记 第五章 继承(5)hashCode 与 toString

    《Java 核心技术 卷1》 笔记 第五章 继承(6) 泛型

    《Java 核心技术 卷1》 笔记 第五章 继承(7) 包装类和可变数组

    《Java 核心技术 卷1》 笔记 第五章 继承(8) 枚举类与类反射

    《Java 核心技术 卷1》 笔记 第五章 继承(9) 异常捕获与反射运用

    《Java 核心技术 卷1》 笔记 第五章 继承(10)反射

    《Java 核心技术 卷1》 笔记 第五章 继承(11)反射泛型数组+方法指针+类设计技巧

    《Java 核心技术 卷1》 笔记 第六章 接口和内部类


    【文章原创作者:香港显卡服务器 http://www.558idc.com/hkgpu.html 网络转载请说明出处】
    网友评论