4.抽象类必须被继承
且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,就要使用 abstract修饰
abstract class Shape2{
//如果一个方法没有具体实现,那么这个方法可以是一个抽象方法
public abstract void draw();
//一个方法是抽象方法,那么存放它的类一定要声明成 抽象类
}
class Cycle extends Shape2{
@Override
public void draw() {
System.out.println("画一个⚪");
}
}
//如果一个类继承了抽象类,那么该类一定要实现抽象类里的方法
class Triangle extends Shape2{
@Override
public void draw() {
System.out.println("画一个▲");
}
}
class Flower extends Shape2{
@Override
public void draw() {
System.out.println("画一个❀");
}
}
抽象类存在最大的意义:就是为了被继承
抽象类本身不能被实例化,要想使用,必须创建该抽象类的子类,然后让子类重写抽象类中的抽象方法
-
抽象类不可以被实例化,即 不能:Shape2 shape = new Shape();
-
类内的数据成员和普通类没有区别,即:抽象类内部可以包含普通方法和属性,甚至构造方法
唯一的就是其成员不能被实例化
-
抽象类生来就是被继承的
-
若一个类继承了抽象类,那么该类必须重写抽象类当中的抽象方法
-
抽象类 / 抽象方法一定不能被 final 修饰
-
一个方法是抽象方法,那么存放它的类一定要声明成 抽象类
抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类
-
当抽象类A 继承抽象类B,A可以不重写B的方法,但一旦A再被继承,那么一定还要重写抽象方法
-
抽象方法一定不能被 final 和 static 修饰
=============================================================
在现实生活中,接口的例子很多,比如电脑的USB接口,电源插座…
电脑的USB口上,可以插:U盘、鼠标、键盘…所有符合USB协议的设备
电源插座插孔上,可以插:电脑、电视机、电饭煲…所有符合规范的设备
通过上述例子可以看出:接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型
接口是抽象类的更进一步,抽象类中还可以包含非抽象方法,和字段,而接口中包含的方法都是抽象方法,字段只能包含静态常量
1.接口当中的方法,都是抽象方法
2.接口中可以有具体实现的方法,需要用default修饰,JDK1.8 加入的
.
3.接口中定义的成员变量,默认是常量
.
4.接口是不可以用来实例化的
.
5.接口和类的关系:implements
一旦一个类实现了接口,那么一定要重写接口当中的方法
.
6.可解决Java单继承问题
.
7.可发生向上转型
.
前提是:把一个对象赋值给接口类型之前,一定要保证这个类实现了这个接口
例如下边代码:Cycle实现了Shape,故可以发生向上转型
.
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现
.
-
使用 interface 定义一个接口
-
接口中的方法一定是抽象方法,故 abstract 可以省略
接口中的方法一定格式 public,故 public 可以省略
-
类使用 implements 继承接口,此处的含义是"实现"
-
接口不能被实例化
-
只要这个类实现了该接口,那么就可发生向上转型
-
一旦一个类实现了接口,那么一定要重写接口当中的方法
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现
有时,我们需要一个类同时继承多个父类,在有些编程语言中可通过多继承方式来实现,但Java中,只支持"单继承",一个类只能 extends 一个父类,但可同时实现多个接口,也能达到类似多继承的效果
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();
}
//猫
// 先 extends 后 implements
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 + “正在蹬腿游泳”);
}
}
//鸭子
class Duck extends Animal implements IRunning, ISwimming,IFlying{
public Duck(String name){
super(name);
}
@Override
public void fly() {
System.out.println(this.name + “正在飞飞飞”);
}
@Override
public void run() {
System.out.println(this.name + “正在跑啊跑”);
}
@Override
public void swim() {
System.out.println(this.name + “正在游啊泳”);
}
}
猫🐱:具有跑能力
鱼🐟:具有游泳能力
青蛙🐸:具有跑、游泳能力
鸭子🦆:具有飞、跑、游泳能力
.
可见,把 run,swim,fly 写在Animal里是不合适的,因为不是每一种动物都具备这些能力
接口主要是对方法的一个抽象,使人时刻牢记多态的好处,让程序猿忘记类型,有了接口之后, 类的使用者就不必关注具体类型,而只关注某个类是否具备某种能力
再看一个例子:
//机器人
class Robot implements IRunning{
@Override
public void run() {
System.out.println(“我是机器人,看谁跑得快!”);
}
}
public class InterfaceDemo2 {
public static void walk(IRunning running) {
System.out.println(“dudududdududu”);
running.run();
}
public static void main(String[] args) {
IRunning iRunning = new Robot();
//iRunning.run();
walk(iRunning);
}
}
输出结果:

在上述 walk 方法内部,我们并不关注到底是哪种动物,只要参数是会跑的就可以,甚至参数可以不是 “动物”,只要会跑即可
给一个数组排序,直接使用Array.sort即可
public static void main(String[] args) {
int[] array = {8,6,2,3,4};
Arrays.sort(array);
System.out.println(Arrays.toString(array));
}
假设给定一个学生类 Student
class Student {
public String name;
public int age;
public int score;
public Student(String name,int age,int score){
this.name = name;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return “Student{” +
“name='” + name + ‘’’ +
“, age=” + age +
“, score=” + score +‘}’;
}
}
再创建一个学生数组,对这个数组中的元素进行排序
public static void main(String[] args) {
Student student1 = new Student(“花”,18,100);
Student student2 = new Student(“A”,20,95);
Student student3 = new Student(“B”,23,88);
Student[] students = new Student[3];
students[0] = student1;
students[1] = student2;
students[2] = student3;
Arrays.sort(students);
System.out.println(Arrays.toString(students));
}
思考:如果使用 Array.sort 方法能否成功对 student 数组排序?
显然,是不可以的 ,类型转换异常

普通数组,是可以使用 sort 方法进行比较数组成员的,但上述比较的是两个学生对象,就不能直接进行比较了,需要我们实现 Comparable 接口,并实现其中的 compareTo 方法
鼠标放在 implements 后按 Alt + Enter

选择 Implement methods

选定之后,会出现如下代码,只需自己重新实现即可

以年龄比较为例:
class Student implements Comparable {
public String name;
public int age;
public int score;
public Student(String name,int age,int score){
this.name = name;
this.age = age;
this.score = score;
}
@Override
public int compareTo(Student o) {
if (this.age > o.age){
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。



由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)

总结
至此,文章终于到了尾声。总结一下,我们谈论了简历制作过程中需要注意的以下三个部分,并分别给出了一些建议:
- 技术能力:先写岗位所需能力,再写加分能力,不要写无关能力;
- 项目经历:只写明星项目,描述遵循 STAR 法则;
- 简历印象:简历遵循三大原则:清晰,简短,必要,要有的放矢,不要海投;
以及最后为大家准备的福利时间:简历模板+Java面试题+热门技术系列教程视频



新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-jcDYyKAU-1711051497191)]
[外链图片转存中…(img-O5uUQTP1-1711051497192)]
[外链图片转存中…(img-CWUbv7Ok-1711051497193)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-IMAGp9nl-1711051497193)]
总结
至此,文章终于到了尾声。总结一下,我们谈论了简历制作过程中需要注意的以下三个部分,并分别给出了一些建议:
- 技术能力:先写岗位所需能力,再写加分能力,不要写无关能力;
- 项目经历:只写明星项目,描述遵循 STAR 法则;
- 简历印象:简历遵循三大原则:清晰,简短,必要,要有的放矢,不要海投;
以及最后为大家准备的福利时间:简历模板+Java面试题+热门技术系列教程视频
[外链图片转存中…(img-hF3HWSyJ-1711051497194)]
[外链图片转存中…(img-7V6Q8ENJ-1711051497194)]
[外链图片转存中…(img-BK8HNJCn-1711051497194)]
本文详细介绍了Java中的抽象类和接口,包括抽象类的定义、抽象方法的使用、继承要求、接口的特点(如方法的抽象性、默认方法、常量等)、接口的实现以及多接口的使用。通过实例展示了如何在类中正确地运用这些概念,强调了多态和接口在面向对象编程中的重要性。









1202

被折叠的 条评论
为什么被折叠?



