JavaSE进阶

第一篇文章的连接: (超详细笔记整理)动力节点_老杜 | JavaSE零基础 :P329(方法) - P479.

文章目录

  • JavaSE进阶
    • final关键字
      • 1. final是Java语言中的关键字
      • 2. final表示最终的,不可变的
      • 3. final可以修饰变量以及方法还有类等
      • 4. final修饰的变量
      • 5. final修饰的局部变量无法重新赋值,final修饰的变量只能赋一次值
      • 6. final修饰的方法
      • 7. final修饰的类
      • 8. final修饰的引用
      • 9. final修饰的实例变量
      • 10. final和static联合修饰的变量-常量(每个单词都大写)
      • 总结
    • 抽象类和接口以及抽象类和接口的区别
      • 抽象类的理解
        • 1. 什么是抽象类?
        • 2. 抽象类属于什么类型?
        • 3. 抽象类怎么定义?
        • 4. 抽象类是无法实例化的,是无法创建对象的,所以抽象类是用来被子类继承的
        • 5. final和abstract是不可以联合使用的
        • 6. 抽象类的子类也可以是抽象类
        • 7. 抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。
        • 8.抽象类关联到一个概念,抽象方法的概念
        • 9.抽象类中不一定有抽象方法,抽象方法必须在抽象类中
        • 10.抽象方法怎么定义?
        • 11.(五颗星):一个非抽象的类,继承抽象类,必须将抽象类中的抽象方法进行覆盖/重写/实现。
    • 接口
      • 接口的基础语法
        • 1、接口是一种“引用数据类型”。
        • 2、接口是完全抽象的。
        • 3、接口怎么定义:[修饰符列表] interface 接口名{}
        • 4、接口支持多继承。
        • 5、接口中只有常量+抽象方法。
        • 6、接口中所有的元素都是public修饰的
        • 7、接口中抽象方法的public abstract可以省略。
        • 8、接口中常量的public static final可以省略。
        • 9、接口中方法不能有方法体。
        • 10.类和类之间叫做继承,类和接口之间叫做实现,仍然可以将实现看作继承,继承使用extends,实现使用implements
        • 11.当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现。
        • 12.一个类可以实现多个接口
        • 13.继承和实现都存在的话:extends关键字在前,implements关键字在后。
        • 14.使用接口,写代码的时候,可以使用多态(父类型引用指向子类型对象)。
      • 接口在开发中的作用
      • is a 、has a、like a
      • 抽象类和接口有什么区别?
    • package 和 import
      • package
        • 1. package是Java中的包机制,包机制的作用是为了方便程序的关系
        • 2. package是一个关键字。例如:
        • 3. 包名的命名规范:一般都采用公司域名倒序的方式(公司的域名具有全球唯一性)
        • 4. 带有包名怎么编译?
        • 5. 怎么运行?
      • import
        • 1. import什么时候不需要?
        • 2. 怎么用?
    • 访问控制权限
      • 访问控制权限的种类
      • 访问控制权限修饰符可以修饰什么?
    • JDK类库的根类:Object
      • 1.Object类中的方法
    • Object类中常用的方法
      • protected Object clone()
      • int hashcode()
      • boolean euqals(Object obj)
      • String toString()
      • protected void finalize()
    • 内部类
      • 匿名内部类
      • 1. 内部类
      • 2. 内部类的分类:
      • 3. 使用内部类编写的代码,可读性很差,能不用尽量不用
      • 4. 匿名内部类属于局部内部类的一种,因为这个类没有名字,而叫匿名内部类
      • 5. 学习匿名内部类的主要目的是让大家以后阅读代码时可以理解。
    • 数组
      • 一维数组
      • 二维数组
      • 总结:
        • 1.1、数组的优点和缺点,并且要理解为什么。
        • 1.2、一维数组的静态初始化和动态初始化
        • 1.3、一维数组的遍历
        • 1.4、二维数组的静态初始化和动态初始化
        • 1.5、二维数组的遍历
        • 1.6、main方法上“String[] args”参数的使用(非重点,了解一下,以后一般都是有界面的,用户可以在界面上输入用户名和密码等参数信息。)
        • 1.7、数组的拷贝:System.arraycopy()方法的使用
        • 1.8、对数组中存储引用数据类型的情况,要会画它的内存结构图。
      • 数组工具类
      • 数据常见算法
        • 冒泡排序
        • 选择排序
      • 二分法查找
      • 介绍一下java.util.Arrays工具类
    • 常用类
      • String类
        • String为什么不可变?
        • String在内存方面的理解
        • 关于String类中的构造方法
        • String类常用的21个方法
      • StringBuffer和StringBuilder
        • StringBuffer和StringBuilder为什么是可变的?
      • 八种基本数据类型对应的包装类
        • 1.java中为8种基本数据类型有对应准备了8中包装类型。
        • 2.为什么提供8中包装类?
        • 3.基本数据类型和包装类的对应
        • 4.8中包装类种其中6个都是数字对应的包装类,他们的父类都是Number,可以先研究一下Number中公共方法:
        • 5.装箱和拆箱
        • 整数型常量池
        • 所遇到异常的总结
        • String int Integer类型转换
      • 日期类
        • 1.怎么获取当前系统时间
        • 2.Date --> String
        • 3.String --> Date
        • 统计方法的执行时长
      • 数字类
        • DecimalFormat 数字格式化
        • BigDecimal 属于大数据,精度极高
        • Random生成随机数
          • 怎么产生int类型随机数。
          • 怎么产生某个范围之内的int类型随机数。
        • Enum枚举类型
          • 枚举是一种引用数据类型。
          • 枚举编译之后也是class文件。
          • 枚举类型怎么定义?
          • 枚举的使用情况
    • 异常类
      • 异常处理机制
        • 1.什么是异常,java提供异常处理机制有什么用?
        • 2.以下程序执行控制台出现了:
        • 3.Java语言中异常是以什么形式存在的
        • 4.java的异常的继承结构
        • 5.编译时异常和运行时异常
          • 编译时异常因为什么而得名?
          • 编译时异常和运行时异常的区别
        • 6.java对异常处理的两种方式
          • 编译时异常的报错
          • 两种处理方法
          • try catch
          • 异常的两个方法
          • finally语句块
            • 面试题finally
          • finally final finalize 的区别
            • final 关键字
            • finally 关键字
            • finalize 方法
      • 自定义异常类
      • 异常在实际开发中的应用
      • 方法覆盖时的异常处理
      • 总结异常关键字
    • 集合
      • 通过集合的构造方法可以完成类型的转换
      • 集合的概述
        • 1.什么是集合?有什么用?
        • 2.集合中存储的为引用数据类型
        • 3.不同的集合对饮不同的数据结构
        • 4.集合在java JDK中哪个包下?
        • 5.集合的继承结构图
          • Map接口
          • 总结 :
      • Collection接口中的常用方法
        • 1.Collection中能存放什么元素?
        • 2.Collection中的常用方法
        • 3.关于集合遍历/迭代器
        • **4.放在集合里的类,需要重写equals方法**
          • contains也重写equals方法
          • remove中也重写了equals方法
        • 5.remove方法中的迭代器
      • List接口中常用方法
        • ArrayList集合
        • 常用的方法
        • 构造方法
      • 链表
        • 单链表
          • 单链表中的节点
          • 添加节点
          • 删除节点
        • 双向链表
          • 源码
          • linkedlist集合没有初始化容量
        • Vector
      • 泛型机制
        • 介绍
        • 使用泛型和不使用泛型
        • 自动类型推断机制
        • 自定义泛型
        • 增强for循环
      • Set接口
        • HashSet
          • 特点
        • TreeSet
          • 特点
      • Map集合
        • 常用的方法
          • 关于内部类的用法
        • Map集合的遍历
        • 哈希表的数据结构
        • HashMap集合:
        • equals和hashCode的重写
        • HashTable
        • Properties
        • TreeSet集合
          • 第一种排序方式
          • 对自定义类型来说,TreeSet可以排序吗?
          • TreeSet的第二种排序方式
      • 自平衡二叉树
      • Collections工具类
      • 总结
    • I/O流
      • 对I/O流的理解
      • IO流的分类?
      • java中的I/O
      • java IO流四大家族
        • close()和flush()方法
      • java.io包下需要掌握的流有16个:
        • java.io.FileInputStream
          • 对程序进行改造,while循环
          • 继续改造,一次读取多个字节
          • 最后的改进
          • 其他常用的两个方法
        • java.io.FileOutput
          • 写入方式
          • 文件的拷贝
          • 002-文件的复制原理
        • FileReader
        • FileWriter
          • 拷贝普通文本文件
        • BufferedReader
          • 字符流转换为字符
        • BufferedWriter
        • PrintStream
          • 改变流的方向setOut
          • 日志工具类的使用
        • ObjectOutputStream
          • 序列化和反序列化
          • 序列化
          • 序列化版本号:
          • 反序列化
          • transient关键字
      • File类
        • 常用方法
        • 拷贝整个目录下的文件
      • IO和Properties联合使用
        • 属性配置文件
    • 多线程
      • 线程和进程
      • 进程和线程的关系
      • 单核CPU和多核CPU
      • 实现线程的两种方式
        • 第一种方式
          • 直接调用run方法的时候栈
          • 调用start方法的时候栈
        • 第二种方式(建议使用)
          • 使用匿名内部类来创建线程
      • 线程生命周期
      • 1.怎么获取当前线程对象
      • 2.获取线程对象的名字
      • 3.修改线程对象的名字
      • 4.线程的默认名字
      • 5.sleep方法
        • **关于线程的sleep方法:**
        • 唤醒正在睡眠的线程
      • 6.终止线程
        • stop方法不建议使用
        • 布尔方法建议使用
      • 关于线程的调度
        • 常见的调度模式
        • 关于线程调度的方法
      • 线程安全(重点)
        • 多线程并发的问题
        • 什么时候出现线程安全问题
        • 解决线程安全问题
        • 涉及到的专业术语
      • 线程安全的例子
        • 线程不安全
        • 解决线程安全的方法
      • java中的三大变量的安全问题
      • 扩大安全同步的范围
      • 在实例方法上使用synchronized
      • 总结
      • 面试题
      • 死锁现象
      • 开发中如何解决线程安全问题
      • 线程其他的内容
        • 1.守护线程
        • 2.定时器
        • 3.实现线程的第三种方式:FutureTask方式,实现Callable接口
        • 4.关于Object类中的wait和notify方法。(生产者和消费者模式)
        • 生产者和消费者模式
    • 反射机制
      • 反射机制有什么用?
      • 反射机制的相关类在哪个包下?
      • 反射机制相关的重要的类有哪些?
      • 获取字节码的三种方式
      • 通过class的newInstance方法来实例化对象
        • 验证反射机制的灵活性
      • 研究一下classforname
      • 关于路径的问题
        • 以路径的形式返回
        • 直接以流的形式返回
      • 资源绑定器
      • 类加载器
        • 什么是类加载器?
        • JDK中自带了3个类加载器
        • 假设有这样一段代码:String s = "abc";
          • 首先通过“启动类加载器”加载。
          • 如果通过“启动类加载器”加载不到的时候,
          • 如果“扩展类加载器”没有加载到,那么
        • java中为了保证类加载的安全,使用了双亲委派机制。
      • 通过反射机制访问一个类属性的修饰符列表/属性/属性名字
      • 通过反射机制反编译一个类的属性
      • 通过反射机制访问对象的某个类
        • 以路径的形式返回
        • 直接以流的形式返回
      • 资源绑定器
      • 类加载器
        • 什么是类加载器?
        • JDK中自带了3个类加载器
        • 假设有这样一段代码:String s = "abc";
          • 首先通过“启动类加载器”加载。
          • 如果通过“启动类加载器”加载不到的时候,
          • 如果“扩展类加载器”没有加载到,那么
        • java中为了保证类加载的安全,使用了双亲委派机制。
      • 通过反射机制访问一个类属性的修饰符列表/属性/属性名字
      • 通过反射机制反编译一个类的属性
      • 通过反射机制访问对象的某个类

final关键字

1. final是Java语言中的关键字

2. final表示最终的,不可变的

3. final可以修饰变量以及方法还有类等

4. final修饰的变量

5. final修饰的局部变量无法重新赋值,final修饰的变量只能赋一次值

6. final修饰的方法

final修饰的方法无法覆盖

7. final修饰的类

final修饰的类无法继承

package Final;
/*final1. final是Java语言中的关键字2. final表示最终的,不可变的3. final可以修饰变量以及方法还有类等4. final修饰的变量final修饰的局部变量无法重新赋值,final修饰的变量只能赋一次值5. final修饰的方法final修饰的方法无法覆盖6. final修饰的类final修饰的类无法继承*/
public class Test01 {public static void main(String[] args){//局部变量int i = 100;i = 200;/*final int k = 100;k = 0;*/}
}
//继承
//如果你不希望别人对A类进行扩展,那么可以给A类加上final
final class A{}
/*
final修饰的类无法继承
class B extends A{}*/
//方法覆盖
class C{public final void doSome(){System.out.println("C");}
}
class D extends C{//无法被覆盖/*public void doSome(){System.out.println("D");}*/
}

8. final修饰的引用

该引用只能指向一个对象,并且它只能永远指向该对象。无法再指向其他对象。并且再该方法执行过程中,该引用指向对象之后,该对象不会被垃圾回收器接收直到当前方法结束,才会释放空间。虽然final的引用指向对象A后,不能再重新指向对象B,但是对象内部的值可以修改

package Final;
/*final修饰的变量,如果fianl修饰的变量是一个”引用“怎么办?final修饰的引用:该引用只能指向一个对象,并且它只能永远指向该对象。无法再指向其他对象。并且再该方法执行过程中,该引用指向对象之后,该对象不会被垃圾回收器接收直到当前方法结束,才会释放空间虽然final的引用指向对象A后,不能再重新指向对象B,但是对象内部的值可以修改*/
public class Test02 {public static void main(String[] args){P p = new P(20);System.out.println(p.age);//-------------------------------------final P p1 = new P(30);System.out.println(p.age);p.age = 60;System.out.println(p.age);//p1 = new P(); 不可以重新new}
}
class P{int age;public P() {}public P(int age) {this.age = age;}
}

9. final修饰的实例变量

​ final修饰的变量只能赋值一次
​ fianl修饰的实例变量,系统不管赋默认值,要求程序员必须手动赋值。这个手动复制,在变量后面直接赋值或者在构造方法中进行赋值也可以。

​ 实例变量在什么时候赋值?
​ 在构造方法执行中进行赋值,(new的时候)

package Final;
/*
final修饰的实例变量final修饰的变量只能赋值一次fianl修饰的实例变量,系统不管赋默认值,要求程序员必须手动赋值这个手动复制,在变量后面直接赋值或者在构造方法中进行赋值也可以。实例变量在什么时候赋值?在构造方法执行中进行赋值,(new的时候)*/
public class Test03 {public static void main(String[] args){}
}
class User{//不可以这么修饰变量 final int i;//手动赋值可以final  int age = 1;//以下代码需要组合使用   weight只赋值一次final double weight;/*public User(){weight = 80;//赶在系统赋默认值之前赋值就行}*///这样也可以public User(double D){this.weight = D;}
}

10. final和static联合修饰的变量-常量(每个单词都大写)

结论:

​ static final 联合修饰的变量称为“常量”。
​ 每一个单词建议使用大写,每个单词之间使用下划线链接
​ 实际上常量和静态变量医用,区别在于:常量值不能变
​ 常量和静态变量,都是存储在方法区,并且都是在类加载时初始化。

常量一般都是公开的,因为公开也不可以改变

package Final;
/*
final修饰的变量一边添加在static修饰结论:static final 联合修饰的变量称为“常量”。每一个单词建议使用大写,每个单词之间使用下划线链接实际上常量和静态变量医用,区别在于:常量值不能变常量和静态变量,都是存储在方法区,并且都是在类加载时初始化。*/
public class Test04 {public static void main(String[] args){System.out.println(Chiness.COUNTRY);}
}
class Chiness{String idCard;String name;String birth;//实例变量,在堆中,//实例变量被final修饰了,说明该实例变量的值不会随着对象的变量而变化//final修饰的实例变量,一般添加static修饰。//即使是不会发生改变,最好声明为静态的,节省内存空间final static String COUNTRY = "China"; //类级别
}
class MyMath{//常量一般都是公开的public static final double PI = 3.1415926;}

总结

1.1、final修饰的类无法继承。
1.2、final修饰的方法无法覆盖。
1.3、final修饰的变量只能赋一次值。
1.4、final修饰的引用一旦指向某个对象,则不能再重新指向其它对象,但该引用指向的对象内部的数据是可以修改的。
1.5、final修饰的实例变量必须手动初始化,不能采用系统默认值。
1.6、final修饰的实例变量一般和static联合使用,称为常量。
public static final double PI = 3.1415926;

抽象类和接口以及抽象类和接口的区别

抽象类的理解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YVk85nKx-1634041323675)(C:/Users/77/Downloads/Documents/09-JavaSE进阶每章课堂画图/01-面向对象/001-抽象类的理解.png)]

1. 什么是抽象类?

​ 类和类之间具有共同特征,将这些类的共同特征提取出来,形成的就是抽象类
​ 类本身是不存在,所以抽象类无法创建对象

2. 抽象类属于什么类型?

​ 抽象类也属于引用数据类型

3. 抽象类怎么定义?

​    语法:
​       [修饰符列表] abstract class 类名{
​               类体;
​       }

4. 抽象类是无法实例化的,是无法创建对象的,所以抽象类是用来被子类继承的

5. final和abstract是不可以联合使用的

​ 这两个关键字是对立的

6. 抽象类的子类也可以是抽象类

7. 抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。

8.抽象类关联到一个概念,抽象方法的概念

​ 抽象方法表示没有实现的方法,没有方法体的方法。
​ pubilic abstract void doSome();
​ 抽象方法的特点:
​ 1.没有方法体,以分号结尾;
​ 2.前面修饰符列表中有abstract关键字

9.抽象类中不一定有抽象方法,抽象方法必须在抽象类中

package Abstract;
/*
抽象类:1.什么是抽象类?类和类之间具有共同特征,将这些类的共同特征提取出来,形成的就是抽象类类本身是不存在,所以抽象类无法创建对象2.抽象类属于什么类型?抽象类也属于引用数据类型3.抽象类怎么定义?语法:[修饰符列表] abstract class 类名{类体;}4.抽象类是无法实例化的,是无法创建对象的,所以抽象类是用来被子类继承的5.final和abstract是不可以联合使用的6.抽象类的子类也可以是抽象类7.抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。8.抽象类关联到一个概念,抽象方法的概念抽象方法表示没有实现的方法,没有方法体的方法pubilic abstract void doSome();抽象方法的特点:1.没有方法体,以分号结尾;2.前面修饰符列表中有abstract关键字9.抽象类中不一定有抽象方法,抽象方法必须在抽象类中*/
public class Test01 {public static void main(String[] args){//无法实例化,不可以创建对象//Account account = new Account();}
}
//final和abstract是不可以联合使用的
/*final abstract class Account{}*/
abstract class Account{public Account(String s){}//不可以不写public Account(){}abstract public void A();}
//子类继承抽象类,子类可以实例化对象
/*class CreditAccount extends Account{}*/
//抽象类的子类可以是抽象类
//构造方法里默认有一个无参构造
//无参构造的第一行为super,super调用父类的无参构造,如果父类没有无参构造(直接提供了一个有参构造,默认没有无参构造),那么会报错
abstract class CreditAccount extends Account{}
//抽象方法必须在抽象方法中
/*class B{abstract public void A();
}*/

10.抽象方法怎么定义?

​ public abstract void doSome();

11.(五颗星):一个非抽象的类,继承抽象类,必须将抽象类中的抽象方法进行覆盖/重写/实现。

package Abstract;
/*抽象类:1.抽象类不一定有抽象方法,抽象方法必须出现在抽象类中2.重要结论:一个非抽象的类继承抽象类,必须将抽象类中的抽象方法进行实现这里的覆盖或者说重写,也可以叫做实现*/
public class Test02 {//父类型为抽象类,子类型为非抽象类,这里是否可以使用多态//面向抽象编程//a的类型Animal,Animal是抽象的,以后调用的都是a.××// 面向抽象编程,不要面向具体变成,降低程序的耦合度,提高程序的扩展能力//这种编程思想符合OCP原则public static void main(String[] args){//对代码不是很理解的时候,能用多态就用多态Animal a = new Brid(); //向下转型a.move();}
}
//抽象类
abstract class Animal{public abstract void move();//抽象方法}
//子类非抽象类
//子类继承父类,父类中有抽象方法,那么子类一定会是抽象类
class Brid extends Animal{//需要将从父类继承过来的方法进行覆盖/重写,或者也可以叫做“实现”//把抽象方法实现了public void move(){System.out.println("move");};}

面试题(判断题):java语言中凡是没有方法体的方法都是抽象方法。
​ 不对,错误的。
​ Object类中就有很多方法都没有方法体,都是以“;”结尾的,但他们
​ 都不是抽象方法,例如:
​ public native int hashCode();
​ 这个方法底层调用了C++写的动态链接库程序。
​ 前面修饰符列表中没有:abstract。有一个native。表示调用JVM本地程序。

接口

接口的基础语法

1、接口是一种“引用数据类型”。

2、接口是完全抽象的。

3、接口怎么定义:[修饰符列表] interface 接口名{}

4、接口支持多继承。

5、接口中只有常量+抽象方法。

6、接口中所有的元素都是public修饰的

7、接口中抽象方法的public abstract可以省略。

8、接口中常量的public static final可以省略。

9、接口中方法不能有方法体。

package Interface;
/*
接口:1.也是一种引用数据类型,编译之后也是class字节码文件2.接口是完全抽象的。(抽象类是半抽象的),或者也可以说接口是特殊的抽象类3.接口是怎么定定义,语法是什么?[修饰符列表] interface 接口名()定义类 [修饰符列表] class 类名{}定义抽象类 [修饰符列表] abstract class 类名{}4.接口支持多继承,一个接口可以继承多个接口5.接口中只包含两部分内容,一部分是常量,一部分是抽象方法,接口中没有其他内容6.接口中所有的元素都是public修饰的,接口中所有的东西都是公开的7.接口中的抽象方法,public abstra 是可以省略的8.接口中的方法都是抽象方法,接口中的方法不能有方法体。10.接口中常量的public static final 可以省略*/
public class Test01 {public static void main(String[] args){// 接口中随便写一个变量就是常量System.out.println( MyMath.PI);}
}
interface A {}
interface B{}
//接口支持多继承
interface C extends A,B{}
interface MyMath{//常量public static final double PI = 3.14;//可以省略public static finaldouble K = 3.1;// public abstract int sum(int a, int b);//抽象方法//接口当中都是抽象发放,那么在编写代码的时候,public static'可以省略么?int sum(int a, int b);//接口中的方法可以有方法体么?//错误:抽象方法不可以带有主体/*void doSome(){}*///sub方法int sub(int a,int b);}

10.类和类之间叫做继承,类和接口之间叫做实现,仍然可以将实现看作继承,继承使用extends,实现使用implements

11.当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现。

package Interface;
/*
接口:1.类和类之间叫做继承,类和接口之间叫做实现,仍然可以将实现看作继承,继承使用extends,实现使用implements2.当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现。*/
public class Test02 {public static void main(String[] args){//接口使用多态MyMath2 mm = new Ab();System.out.println(mm.PI);int re = mm.sub(4,3);System.out.println(re);}
}
interface MyMath2{public static final double PI = 3.14;int sum(int a, int b);int sub(int a,int b);}
//编写一个类(这个类是非抽象类)
//需要重写方法,因为Ab不是抽象类
class Ab implements MyMath2{//实现接口中的方法public int sum(int a, int b){return a+b;};public int sub(int a, int b){return a-b;};}
//抽象类实现,可以编译通过
abstract class Ac implements MyMath2{}

12.一个类可以实现多个接口

接口和接口之间虽然后没有继承关系,但是可以强制转换,但是运行时可能会出现ClassCastException异常,需要于类和类之间的强制转换一样,加上instanceof判断。

package Interface;
/*一个类可以同时实现多个接口java中的类和类之间只允许单继承,实际上单继承是为了简单出现的很多情况下会存在多继承,接口弥补了这个缺陷接口A和接口B虽然没有继承关系,但是可以互相强制转换,但是运行时可能出现ClassCastException异常无论是向下转型还是向上转向,都必须要有继承关系没有继承关系,编译器会报错(接口不会)都需要加上instanceof进行判断,转型之前先进行判断。*/
public class Test03 {public static void main(String[] args){//多态AA a = new D();BB b = new D();//向下转型BB b1 = (BB)a;b1.m2();//向下转型直接转成DD d = (D) a;d.m2();M m = new E();//经过测试,接口和接口郑伊健在进行强制类型转换的时候,没有继承关系,也可以强转//但是运行时可能会出现ClassCastException异常,编译没问题,运行有问题if(m instanceof K){K k = (K)m;}}
}
interface M{}
interface K{}
class E implements M,K{}
interface AA{void m1();
}
interface BB{void m2();
}
interface CC{void m3();
}
//类和接口之间可以进行多实现
//需要对接口中的类进行重写
//类似于多继承
class D implements AA,BB,CC{//实现A接口的m1public void m1(){};public void m2(){};public void m3(){};
}

13.继承和实现都存在的话:extends关键字在前,implements关键字在后。

package Interface;
/*
继承和实现都存在的话:extends关键字在前,implements关键字在后。*/
public class Test04 {public static void main(String[] args){//创建对象Flyable f = new Cats();//多态f.fly();Flyable f1 = new fish();f1.fly();}
}
class Animal{}
interface Flyable{void fly();
}
class Cats extends Animal implements Flyable{@Override//重写接口的抽象方法public void fly() {System.out.println("飞猫");}
}
//没有实现接口
class Snake extends Animal{}
class fish extends Animal implements Flyable{public void fly() {System.out.println("飞												

(超详细笔记整理)动力节点_老杜 | JavaSE进阶 【P486之后】相关推荐

  1. (超详细笔记整理)动力节点_老杜 | JavaSE零基础 :P329(方法) - P479

    JAVA基础学习 第二篇文章的连接: (超详细笔记整理)动力节点_老杜 | JavaSE进阶 [P486之后]. 文章目录 JAVA基础学习 方法 Java的主要内存空间 栈数据结构 **栈数据结构: ...

  2. Python后端转JAVA最快多久_【动力节点】老杜支招:Java小白学习入门攻略,涵盖学习路线...

    动力节点在B站的直播相当好,相当受欢迎,教学总监亲自解惑.零基础学Java的同学确实把思路打开不少. 回顾:11月14日晚8:00,杜老师在动力节点B站大咖直播间,首次开播与粉丝面基,本场直播不吹,不 ...

  3. JavaScript零基础入门--笔记动力节点最新老杜(九-完结)全套笔记精髓

    JSON         1.什么是JSON,有什么用?                     JavaScript Object Notation(JavaScript对象标记),简称JSON.( ...

  4. 学习javascript这一篇就够了超详细笔记(建议收藏)上

    学习javascript这一篇就够了超详细笔记(建议收藏)上 1.初识 计算机基础导读 编程语言 计算机基础 初识js 浏览器执行 js组成 js初体验-三种书写位置 js注释 js输入输出语句 2. ...

  5. Java并发编程(中下篇)从入门到深入 超详细笔记

    接上一篇博客笔记:Java并发编程(中上篇)从入门到深入 超详细笔记_未来很长,别只看眼前的博客-CSDN博客https://blog.csdn.net/weixin_53142722/article ...

  6. SPRING注解驱动开发-雷神课程超详细笔记

    SPRING注解驱动开发-雷神课程超详细笔记 时间:2021-03-21 2022-04-06更新:最近翻起一年多前写的笔记复习,还是收获颇多,很多当时无法理解的知识现在慢慢能理解了,可能是工作一年的 ...

  7. 清晰易懂!关于PS入门的超详细笔记!

    给大家分享一篇关于PS入门的超详细笔记!原理讲解清晰明了,虽不是新版本解析,但都是新手学习PS必掌懂的一些知识点,灰常的实用,转走收藏学习! 编辑:千锋UI设计 来源:PS学堂

  8. SpringBoot学习笔记总结——动力节点

    最近跟着动力节点王鹤老师的视频学到了springboot,看过最细的springboot讲解,初学入门最佳,自己做了笔记分享给大家 视频资源: 动力节点springboot视频教程-专为springb ...

  9. 千锋 Vue 详细笔记整理

    视频笔记是根据B站 千锋 涛哥 - SpringBoot+vue+前后端分离项目<锋迷商城>实战课-完结版 进行整理的 笔记可上 gitee仓库 自取 千锋 Vue 笔记整理 一.vue ...

  10. Maven学习笔记,动力节点maven教程随堂笔记(史上最全)

    Maven笔记 这篇笔记的学习视频来自b站动力节点 https://www.bilibili.com/video/BV1dp4y1Q7Hf 笔记中的源码下载地址 动力节点maven资料 第一部分 1. ...

最新文章

  1. Windows 7使用wubi硬盘安装Ubuntu (文字版)
  2. GMIS 2017大会杨洋演讲:认知分析-透过机器重新审视商业本质
  3. 【CV】使用 scikit-image 进行图像处理
  4. 关于在Ubuntu系统中出现Could not get lock /var/lib/dpkg/lock解决方案
  5. HDU1106 排序【字符串+整数+排序】
  6. 课文电子计算机与多媒体减写,课文电子计算机与多媒体关系介绍
  7. 【持续更新】实用算法小点总结(怕忘QAQ)
  8. DeepFaceLab AI换脸使用教程(1.安装及分解视频)
  9. Sphinx制作htmlhelp手册文档(Manual-chm)
  10. Wordpress世界最牛?做网站用国内cms建站系统才是正道
  11. 湖北省安陆市发展怎么样
  12. 多列 count(distinct)改写优化
  13. 第十五篇:UE4 漫游Matinee的制作和如何在漫游中实现自由转向(改进)
  14. ImportError: No module named 'StringIO'
  15. 浅谈企业数据安全治理
  16. 玛利亚凯瑞的海豚音串烧
  17. fastadmin上传图片,小程序端上传多张图到服务器
  18. LDA和PCA降维的区别
  19. 【笔记】关于汉字注音
  20. 三菱FX3U与2台台达温控器modbus通讯案例,实现设定温度,设定温度探头型号,读取实际温度

热门文章

  1. 618网购盛宴即将开启,云联络中心+AI成为电商的“新基建”
  2. matlab 对数回归,对数拟合
  3. bindZip下载地址
  4. 树的深度优先和广度优先
  5. BGP 下一跳的理解和实验
  6. 金融数据分析期末报告:基于时间序列的回归模型及其应用
  7. 凹点匹配 matlab源码,粘连类圆形目标图像的分割方法与流程
  8. 未来智能营销时代到来,人工智能营销系统方兴未艾
  9. pc端和移动端有什么区别?
  10. LeetCode 412 Fizz Buzz