Java 学习博客_10 入门——抽象类、抽象方法、接口

简介: 以黑马程序员全套Java教程网课为主。

抽象方法:没有方法体的方法

public abstract void eat();

抽象类:含有抽象方法的类。

(没有抽象方法的类也可以是抽象类,但是意义何在)

抽象类不能直接创建对象,需要子类把抽象方法重写补全后才能创建对象。否则,子类也是抽象方法。

接口

接口是一种公共的行为规范标准,只要符合规范,大家都可以使用。 java 中的接口主要是对行为的抽象。如:

public interface Jumpping{//接口
    public abstract void Jump();
}

public class Cat implements Jumpping{//实现
    //重写 Jump() 方法。如果不重写, Cat 就是一个抽象类
}

接口中的成员变量默认是 public static final 的,不能修改,而且可以通过 Class.成员变量 的方式直接访问。

接口中没有构造方法和非抽象方法。成员方法默认是 public abstract 的。

(但接口的实现类中可以有 super。这是因为所有没有父类的类都默认继承自 Object 类,如果接口的实现类使用 Object 类中的方法就会用到 super)

接口是抽象类,不能直接实例化,可以借助多态的方法实例化。

相较类与类之间不能多继承,只能层层继承:接口可以多实现implements interface1, interface2

接口和接口之间也可以多继承interface1 extends interface2, interface3

总结

在这里插入图片描述

设计原则

抽象类中的抽象方法所有对象中都必须有;接口则是选择性实现的。比如门这一大类,其中不管什么门,防盗门、木门、自动门,都有门的特有行为(开关门、锁门……)只是实现方法可能不一样,所以要在门父类中定义这些抽象方法,在子类中必须实现。

但是对于门来说不是必须有的抽象方法(如响铃)这种抽象方法就应该作为接口,选择性实现。有响铃功能的门实现这一接口,没有响铃功能的门不必实现。

例:有乒乓球运动员、乒乓球教练、篮球运动员、篮球教练。为了能出国交流,乒乓球运动员和教练需要会说英语。分析本例如何用具体类、抽象类、接口实现。

graph TB
A[人]-->B[运动员]
A-->C[教练]
B-->D[篮球运动员]
B-->E[乒乓球运动员]
H[说英语]-->E
H-->G
C-->G[乒乓球教练]
C-->F[篮球教练]

其中,人、运动员、教练是抽象类,说英语是接口。其他具体类需要实现接口,并重写继承的所有抽象方法。

抽象类 / 接口作为形参 / 返回值

类也可以作为形式参数或函数的返回值。

抽象类:如果方法的形参或函数的返回值是抽象类名,实际需要的是实现了该抽象类的子类对象。

如函数形参是Animal,实际需要通过多态的方法Animal a=new Cat();然后把a传给函数。

接口作为形参/函数返回值,和抽象类一样,实际需要的是实现了该接口的类对象。

目录
相关文章
|
2月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
239 18
|
2月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
210 0
|
2月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
201 4
|
2月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
292 5
|
3月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
142 11
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
166 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
193 1
|
3月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
153 0
|
3月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
239 16