当前位置: 首页 > article >正文

初始Java5

目录

一.抽象类(一张图搞定基础)

二.接口

1.语法定义:

提示:

2.接口的使用

注意:

3.接口的特性

1. 不可实例化

2.抽象方法类型固定public abstract

3..接口中的方法是不能在接口中实现的,只能由实现接口的类来实现

4.重写接口中方法时,不能使用默认(default)的访问权限

5. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量

6.接口中不能有静态代码块和构造方法

7. 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class

8. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类(而后抽象类的子类要都实现)

9. jdk8中:接口中还可以包含default方法。

总结:

4.实现多个接口

5.接口间的继承

6.接口使用实例

1.给对象数组排序

2.借用Comparable 接口实现其中的 compareTo 方法实现对象排序:


一.抽象类(一张图搞定基础)

1.用abstract来定义抽象类与抽象方法;当有抽象方法的时候必定前面的类名前加abstract ,后面的“{}”要去掉;

2.抽象类不能被实例化只能被继承 ;

3.  抽象类里面可以定义普通的成员变量与成员方法;

4.当抽象类被继承的时候子类要完全重写父类的抽象方法,除非子类也是一个抽象类(如果这样那子类的子类如果是普通类则要重写父类与父类没重写的父父类方法。);

5.抽象类中abstract抽象方法不能连用一些不能重写的关键字比如static private final等,

二.接口

Java 中,接口可以看成是:多个类的公共规范,是一种引用数据类型。

1.语法定义:

public interface 接口名称{
// 抽象方法
public abstract void method1(); // 所用抽象方法public abstract  是固定搭配,可以不写
public void method2();
abstract void method3();
void method4();
// 注意:在接口中上述写法都是抽象方法,跟推荐方式4,代码更简洁
//抽象成员变量(public abstract final  是固定搭配,可以不写)
public abstract final a;

}

提示:

1. 创建接口时 , 接口的命名一般以大写字母 I 开头 .
2. 接口的命名一般使用 " 形容词 " 词性的单词 .
3. 阿里编码规范中约定 , 接口中的方法和属性不要加任何修饰符号 , 保持代码的简洁性

2.接口的使用

接口不能直接实例化,只能让其他类来实现该接口的方法(其中其他类要重写其中所有抽象方法)
public class 类名称 implements 接口名称{
// ...
}

注意:

子类和父类之间是extends 继承关系,类与接口之间是 implements 实现关系。

3.接口的特性

1. 不可实例化

接口类型是一种引用类型,但是不能直接new接口的对象

public class TestUSB {
public static void main(String[] args) {
USB usb = new USB();
}
}
// Error:(10, 19) java: day20210915.USB是抽象的; 无法实例化

2.抽象方法类型固定public abstract

. 接口中每一个方法都是 public 的抽象方法 , 即接口中的方法会被隐式的指定为 public abstract (只能是 public abstract,其他修饰符都会报错 )
public interface USB {
// Error:(4, 18) java: 此处不允许使用修饰符private
private void openDevice();
void closeDevice();
}

3..接口中的方法是不能在接口中实现的,只能由实现接口的类来实现

public interface USB {
void openDevice();
// 编译失败:因为接口中的方式默认为抽象方法
// Error:(5, 23) java: 接口抽象方法不能带有主体
void closeDevice(){
System.out.println("关闭USB设备");
}
}

4.重写接口中方法时,不能使用默认(default)的访问权限

public interface USB {
void openDevice(); // 默认是public的
void closeDevice(); // 默认是public的
}
public class Mouse implements USB {
@Override
void openDevice() {
System.out.println("打开鼠标");
}
// ...
}
// 编译报错,重写USB中openDevice方法时,不能使用默认修饰符
// 正在尝试分配更低的访问权限; 以前为public

5. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量

6.接口中不能有静态代码块和构造方法

7. 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class

8. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类(而后抽象类的子类要都实现)

9. jdk8中:接口中还可以包含default方法。

总结:

4.实现多个接口

Java 中,类和类之间是单继承的,一个类只能有一个父类,即 Java 中不支持多继承 ,但是 一个类可以实现多个接 。如下面:
//下面通过类来表示一组动物.
class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
}
//再提供一组接口, 分别表示 "会飞的", "会跑的", "会游泳的".
interface IFlying {
void fly();
}
interface IRunning {
void run();
}
interface ISwimming {
void swim();
}
//接下来我们创建几个具体的动物
class Cat extends Animal implements IRunning {
public Cat(String name) {
super(name);
}
@Override
public void run() {
System.out.println(this.name + "正在用四条腿跑");
}
}
class Fish extends Animal implements ISwimming {
public Fish(String name) {
super(name);
}
@Override
public void swim() {
System.out.println(this.name + "正在用尾巴游泳");
}
}
class Frog extends Animal implements IRunning, ISwimming {
public Frog(String name) {
super(name);
}
@Override
public void run() {
System.out.println(this.name + "正在往前跳");
}
@Override
public void swim() {
System.out.println(this.name + "正在蹬腿游泳");
}
}

本质:让类来继承一个父类(只能继承一个父类)并且实现多个接口(可以实现多个接口),从而实现多继承。       父类:该对象属于的更高层次概括。 接口,该对象的功能。

5.接口间的继承

Java 中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:用接口可以达到多继承的目的。
接口可以继承一个接口 , 达到复用的效果 . 使用 extends 关键字 .
interface IRunning {
void run();
}
interface ISwimming {
void swim();
}
// 两栖的动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {
}
class Frog implements IAmphibious {
...
}
通过接口继承创建一个新的接口 IAmphibious 表示 " 两栖的 ". 此时实现接口创建的 Frog , 就继续要实现 run
, 也需要实现 swim 方法 .
接口间的继承相当于把多个接口合并在一起 .

6.接口使用实例

1.给对象数组排序

正常使用:

class Student {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public String toString() {
return "[" + this.name + ":" + this.score + "]";
}
}
//再给定一个学生对象数组, 对这个对象数组中的元素进行排序(按分数降序).
Student[] students = new Student[] {
new Student("张三", 95),
new Student("李四", 96),
new Student("王五", 97),
new Student("赵六", 92),
};
//使用数组中排序方法sort
Arrays.sort(students);
System.out.println(Arrays.toString(students));

 运行出错, 抛出异常.
Exception in thread "main" java.lang.ClassCastException: Student cannot be cast to java.lang.Comparable

分析:sort可排序整数,但是无法排序对象(不知道按照什么排序)。

2.借用Comparable 接口实现其中的 compareTo 方法实现对象排序:

class Student implements Comparable {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public String toString() {
return "[" + this.name + ":" + this.score + "]";
}
@Override
public int compareTo(Object o) {
Student s = (Student)o;
if (this.score > s.score) {
return -1;
} else if (this.score < s.score) {
return 1;
} else {
return 0;
}}}
sort 方法中会自动调用 compareTo 方法 . compareTo 的参数是 Object , 其实传入的就是 Student 类型的对象 .
然后比较当前对象和参数对象的大小关系 ( 按分数来算 ).
如果当前对象应排在参数对象之前 , 返回小于 0 的数字 ;
如果当前对象应排在参数对象之后 , 返回大于 0 的数字 ;
如果当前对象和参数对象不分先后 , 返回 0;
再次执行程序 , 结果就符合预期了 .


http://www.kler.cn/a/506038.html

相关文章:

  • Linux 下配置 Golang 环境
  • SDK调用文心一言如何接入,文心一言API接入教程
  • SpringBoot之OriginTrackedPropertiesLoader类源码学习
  • Qt/C++进程间通信:QSharedMemory 使用详解(附演示Demo)
  • [UE4图文系列] 5.字符串转中文乱码问题说明
  • VSCode连接Github的重重困难及解决方案!
  • 49.字母异位词
  • 单芯片控制多个高性能伺服电机
  • 【Linux】多路转接select
  • PyTorch使用教程(1)—PyTorch简介
  • MongoDB 学习建模与设计思路--统计数据更新案例
  • Ubuntu本地部署网站
  • 实现小球不断往下滚动
  • LabVIEW实现油浸式变压器自主监测与实时报告
  • tplink rt406路由器如何配置端口映射
  • 人脸识别SDK(Android)之Github示例及集成详解
  • C语言初阶习题【29】杨氏矩阵
  • 代码随想录算法训练营day30
  • python爬虫根据需要查找某个链接并保存
  • 阿里云 EMR 发布托管弹性伸缩功能,支持自动调整集群大小,最高降本60%
  • 如何解决 XGBoost 控制台警告:版本不一致导致的模型加载问题
  • day10_Structured Steaming
  • 【MATLAB代码】CV和CA模型组成的IMM(滤波方式为UKF),可复制粘贴源代码
  • 神经网络常见操作(卷积)输入输出
  • 【微服务】SpringBoot 通用异常处理方案使用详解
  • PyTorch使用教程(3)-Tensor包