文章目录
前言
大家好呀,今天给大家带来抽象类和接口的讲解,那么废话不多说,跟着我一起去学习吧!
1.1抽象类的概念
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果 一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
下面我们定义父类Animal和子类Dog,Cat来画图解释一下
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.bark();// 狗叫
cat.bark();// 猫叫
}
}
abstract class Animal{
/*
* Animal是动物类,每个动物都有叫的方法。
* 但由于Animal不是具体的动物,所以叫的方法无法具体实现
* 那么我们该在方法中写什么好?
* 写什么都是没用的,因为父类Animal的bark方法无法描述所有动物的叫!
* 狗和猫的叫不同,狮子和大象等都不同
* 那么既然无法实现,不如直接定义为抽象类!让子类重写抽象方法
* 让子类自己去实现方法!
* */
public abstract void bark();
}
class Dog extends Animal{
@Override
public void bark() {
System.out.println("狗叫");
}
}
class Cat extends Animal{
@Override
public void bark() {
System.out.println("猫叫");
}
}
1. 2抽象类的语法
在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现(既不需要方法体)。
抽象类也是类的一种,也是可以有普通成员变量和方法
1.3抽象类的特性
1.3.1抽象类不能直接实例化对象
抽象类无法描述具体的对象,实例化没有意义,所以java不允许实例化
这是语法,理解着去记,实例化出来也没用那为何要实例化呢?
这时候可能就有人说了,我如果就要实例化呢?
在这里我送你两句话
1.想写bug没人能拦你,
2.不过既然你问了这个问题,我还是会给出解决办法地,可以用匿名内部类(本质上其实就是重写了抽象方法)
1.3.2抽象方法不能被private,final和static修饰
private是访问修饰限定符,被修饰后抽象方法只能在本类中才有权限访问
举个例子吧,从前有个小孩叫张三,张三的爸爸叫李四,李四有一笔私房钱,那么请问,李四构不构成犯罪?
好吧扯远了,张三可以用李四的压岁钱吗?
我明确地告诉你,不可以,因为李四的money是私有的,只能李四自己用!
final修饰的方法表示最终的方法,不能重写
static为什么不能修饰抽象方法?
不知阁下可否知道static修饰的是东西属于类的,在类加载的时候就被加载了那么类的东西可以被继承吗?是不可以的
static修饰的东西是类的一部分,假如类是个
那么static修饰的东西可以是一面墙,一个地板,无法被继承
1.3.3 抽象类的子类要么也是抽象类,要么重写所有抽象方法
怎么理解? 动物可以有子类陆生和水生,显然这两个子类都是抽象类
动物也可以是狗和猫,显然,这两个类都不是抽象类
我们以水生和狗来举例
1.4抽象类的作用
-
定义通用的属性和方法:抽象类可以定义一些通用的属性和方法,供其子类继承和实现。
-
规范子类的行为:抽象类可以定义一些抽象方法,强制其子类实现这些方法,从而规范子类的行为。
-
提高代码的复用性:抽象类可以作为其他类的基类,提供一些通用的功能,从而提高代码的复用性。
-
实现多态:通过抽象类和多态的特性,可以实现基于抽象类的多态性,使得程序更加灵活和可扩展。
-
封装共同的逻辑:抽象类可以封装一些共同的逻辑,使得子类可以直接继承这些逻辑,而不需要重复实现。
抽象类算是接口和继承之间一种平庸的选择!
2.1 接口的概念
接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。 在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。
2.2 语法规则
接口的定义与类基本相同,将class换成interface即可
2.3 接口的使用
接口不能直接使用,必须要有一个实现类来实现接口,实现接口中所有的抽象方法
2.4 接口的特性
1. 接口类型是一种引用类型,但是不能直接new接口的对象
2.. 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是 public abstract)
3.接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量
2.5抽象类和接口的区别
抽象类和接口都是 Java 中多态的常见使用方式. 都需要重点掌握. 同时又要认清两者的区别
核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中 不能包含普通方法, 子类必须重写所有的抽象方法.
总结
以上就是今天要讲的内容,本文重点介绍了抽象类简单介绍了接口,抽象类和接口中提供了大量能使我们快速便捷地处理数据的函数和方法,值得我们去重点掌握。