-
2022-03-17 19:25:18
下面会简单介绍抽象类和接口的定义,并根据它们的属性,了解他们的区别,同时也会引导出他们的适用场景。如有缺陷请斧正。
抽象类
定义:用abstract关键字修饰的类就是抽象类。例:abstract class A{}
注意:
1. 不允许用final修饰抽象类或抽象方法(final关键字修饰的类不能被继承,final修饰的方法不能被重写,这样的话,定义一个没有具体实现的方法和类是么有意义的)。
2.也不允许static关键字修饰抽象方法(static关键字修饰的方法是通过方法名直接访问,他不能访问实例变量和实例方法,他就只能调用本身的方法,不具备用上转型对象调用子类方法的能力,也是没有意义的)
3.抽象类中可以有抽象方法,也可以没有抽象方法
4.抽象方法不能用new关键字创建对象
5.抽象类的对象可以作为上转型对象( Animal a=new Tiger(); a就是上转型对象)
接口
定义: 用interface关键字修饰的类。 例:interface A{}
注意:
1.接口中只有抽象方法,接口中常量都是用public修饰,方法都是用public abstract修饰,我们在定义时,这些修饰符,系统都是帮我们自动省略的。
2.接口的实现用implements关键字,一个类可以实现一个或者多个接口,接口名之间用逗号隔开。例:class A implements B,C,D{}
3.如果非抽象类实现接口,需要重写里面所有的方法,而且访问权限都要用public修饰符进行修饰,不可省略。抽象类可以重写接口中的方法,也可以直接拥有接口中的方法。
4.public修饰的接口是public接口,不加public修饰的接口是友好接口。接口继承接口用extends关键字
5.接口声明的变量是接口变量,可以用来实现接口回调的问题。
区别
1.接口和抽象类都不能实例化,接口必须是abstract方法,而抽象类不用。
2.接口可以用于多继承。抽象类只能继承一个。
3.接口只能有常量,抽象类可以有常量和变量。
4.继承的关键字不一样:接口继承接口和类继承类用extends,类继承接口用implements。
5.抽象类将其抽象方法的实现交给子类,接口将抽象方法的实现交给实现该接口的类。
应用场景
抽象类:某个问题需要子类除了需要重写父类的abstract的方法,还需要从父类继承变量或者重写重要的非abstract方法,就考虑abstract类
接口:某个问题不需要继承,只需要很多子类给出重复的abstract方法的具体实现细节,就用接口
更多相关内容 -
抽象类与接口的实际应用
2019-05-08 22:07:35抽象类的常见实际应用——模板 public class AbstractCaseDemo01 { public static void main(String[] args) { // TODO Auto-generated method stub Person p=new Student("小明",18,99.9f); p.say(); }...抽象类的常见实际应用——模板
public class AbstractCaseDemo01 { public static void main(String[] args) { // TODO Auto-generated method stub Person p=new Student("小明",18,99.9f); p.say(); } } abstract class Person{ private String name; private int age; public Person(String name,int age) { this.setAge(age); this.setName(name); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void say() { //说话是具体功能要定义为普通方法 System.out.println(this.getContent()); } public abstract String getContent(); } class Student extends Person{ private float score; public Student(String name,int age,float score) { super(name,age); this.setScore(score); } public float getScore() { return score; } public void setScore(float score) { this.score = score; } public String getContent() { return "学生信息——>姓名:"+super.getName()+"年龄:"+super.getAge()+"成绩:"+this.score; } } //结果: //学生信息——>姓名:小明年龄:18成绩:99.9
接口的常见实际应用——工厂设计
工厂设计:在接口与具体子类之间加入一个过渡端,通过此过渡段取得接口实例。一般称这个过渡端为工厂类。
步骤:
1、创建接口和子类。
2、创建过渡端。
3、使过渡端作用于接口和接口子类之间。
4、在过渡端取得接口实例。public class InterfaceCaseDemo { public static void main(String[] args) { // TODO Auto-generated method stub Fruit f=null; f=Factory.getInstance("apple"); f.eat(); } } interface Fruit{ public abstract void eat(); } class Apple implements Fruit{ public void eat() { System.out.println("吃苹果"); } } class Orange implements Fruit{ public void eat() { System.out.println("吃橘子"); } } class Factory{ public static Fruit getInstance(String className) { //取得接口实例 Fruit f=null; if("apple".equals(className)) { f=new Apple(); } if("orange".equals(className)) { f=new Orange(); } return f; } } //结果: //吃苹果
接口的常见实际应用——代理设计
代理设计:就是指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理。
步骤:
1、创建接口。
2、创建代理主题和真实主题并都实现接口。
3、代理主题操作真实主题。public class ProxyDemo { public static void main(String[] args) { // TODO Auto-generated method stub NetWork net=null; //定义接口对象 net=new Proxy(new Real()); //实例化代理,同时传入代理的真实操作 net.browse(); //客户的实际操作 } } interface NetWork{ //1、创建接口 public void browse(); } class Real implements NetWork{ //2、创建真实主题并实现接口 public void browse() { System.out.println("上网浏览信息"); } } class Proxy implements NetWork{ //3、创建代理主题并实现接口 private NetWork network; public Proxy(NetWork network) { //设置代理主题的真实操作 this.network=network; //设置代理主题的子类 } public void check() { //代理主题自己的操作 System.out.println("检查用户是否合法"); } public void browse() { this.check(); //调用代理主题具体业务的操作 this.network.browse(); //4、调用(操作)真实主题 } } //检查用户是否合法 //上网浏览信息
代理主题要做比真实主题更多的业务相关操作。
-
抽象类和接口的区别与应用场景
2017-07-22 15:32:31在应用场景下,选择使用接口和抽象类的依据是什么? 一、抽象类和接口在语法上的异同: 1、相同点 都不能被实例化 2、不同点 抽象类中不一定都是抽象方法,但是接口中的方法必须为public修饰的、抽象的 ...接口和抽象类有什么区别
在应用场景下,选择使用接口和抽象类的依据是什么?
一、抽象类和接口在语法上的异同:
1、相同点
都不能被实例化
2、不同点
第一点. 接口是抽象类的变体,接口比抽象类更加抽象,接口中所有的方法都是抽象的。
第二点. 每个类只能继承一个抽象类,但是可以实现多个接口
第三点.抽象类中不一定都是抽象方法,抽象的而抽象类可以实现部分方法。但是接口中方法必须为public修饰的、抽象的不能实现具体的法。
第四点. 接口中基本数据类型为static 而抽象类不是的。
二、应用场景
应用都是基于规则的应用,也就是基于语法的应用,我们可以根据语法上的异同点来总结抽象类和接口的应用场景
相同点没有什么可说的,我们从不同点下手。
1、第一个重要的不同点就是,
抽象类中不一定都是抽象的方法,也可以有具体实现的方法,这样就可以把大家公用的方法提升到抽象类中,然后具体的方法可以留给子类自己实现(此处经典的应用,模板方法设计模式)。所以抽象类可以更好的实现代码的复用
2、另一个重要的不同就是类可以实现多个接口。
接口和抽象类的概念不一样。这个可以理解为接口是对动作的抽象,抽象类是对根源的抽象(即对本质的抽象与其他类的本质不同)。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
另一个重要的概念就是多态,多态通过分离做什么和怎么做,从另一个角度将接口和实现分离出来。多态不但能够改善代码的组织结果和可读性,还能创建可扩展的程序----即无论在项目最初创建时还是在需要添加新功能时都可以“生长”的程序。由于接口更关注于动作的实现,多态主要是分离“做什么”和“怎么做”,所以接口的另一个重要的应用就是多态的实现(当然抽象类也可以实现多态,但是接口更加合适)。
抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。
(参考:http://blog.csdn.net/fenglibing/article/details/2745123,
《java编程思想》)
-
抽象类和接口有什么区别
2018-08-25 20:36:35从 java 容器类的设计讨论抽象类和接口的应用 除了前面提到的一个问题:多态到底是用抽象类还是接口实现?我还看到有人评论说:现在都是提倡面向接口编程,使用抽象类的都被称为上世纪的老码农了。哈哈。看到这个...原文链接: javacodegeeks 翻译: ImportNew.com - jessenpan
译文链接: http://www.importnew.com/12399.html转自:http://www.importnew.com/12399.html
http://blog.xiaohansong.com/2015/12/02/abstract-class-and-interface/
很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。
在讨论它们之间的不同点之前,我们先看看抽象类、接口各自的特性。
抽象类
抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet为例:
1
2
3
4
5
6
7
8
9
public
abstract
class
GenericServlet
implements
Servlet, ServletConfig, Serializable {
// abstract method
abstract
void
service(ServletRequest req, ServletResponse res);
void
init() {
// Its implementation
}
// other method related to Servlet
}
当HttpServlet类继承GenericServlet时,它提供了service方法的实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public
class
HttpServlet
extends
GenericServlet {
void
service(ServletRequest req, ServletResponse res) {
// implementation
}
protected
void
doGet(HttpServletRequest req, HttpServletResponse resp) {
// Implementation
}
protected
void
doPost(HttpServletRequest req, HttpServletResponse resp) {
// Implementation
}
// some other methods related to HttpServlet
}
接口
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。以Externalizable接口为例:
1
2
3
4
5
6
public
interface
Externalizable
extends
Serializable {
void
writeExternal(ObjectOutput out)
throws
IOException;
void
readExternal(ObjectInput in)
throws
IOException, ClassNotFoundException;
}
当你实现这个接口时,你就需要实现上面的两个方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public
class
Employee
implements
Externalizable {
int
employeeId;
String employeeName;
@Override
public
void
readExternal(ObjectInput in)
throws
IOException, ClassNotFoundException {
employeeId = in.readInt();
employeeName = (String) in.readObject();
}
@Override
public
void
writeExternal(ObjectOutput out)
throws
IOException {
out.writeInt(employeeId);
out.writeObject(employeeName);
}
}
抽象类和接口的对比
参数 抽象类 接口 默认的方法实现 它可以有默认的方法实现 接口完全是抽象的。它根本不存在方法的实现 实现 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现 构造器 抽象类可以有构造器 接口不能有构造器 与正常Java类的区别 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 接口是完全不同的类型 访问修饰符 抽象方法可以有public、protected和default这些修饰符 接口方法默认修饰符是public。你不可以使用其它修饰符。 main方法 抽象方法可以有main方法并且我们可以运行它 接口没有main方法,因此我们不能运行它。(java8以后接口可以有default和static方法,所以可以运行main方法) 多继承 抽象方法可以继承一个类和实现多个接口 接口只可以继承一个或多个其它接口 速度 它比接口速度要快 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。 添加新方法 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 如果你往接口中添加方法,那么你必须改变实现该接口的类。 什么时候使用抽象类和接口
- 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
- 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
- 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
什么时候使用抽象类?
抽象类让你可以定义一些默认行为并促使子类提供任意特殊化行为。
例如:Spring的依赖注入就使得代码实现了集合框架中的接口原则和抽象实现。
Java8中的默认方法和静态方法
Oracle已经开始尝试向接口中引入默认方法和静态方法,以此来减少抽象类和接口之间的差异。现在,我们可以为接口提供默认实现的方法了并且不用强制子类来实现它。这类内容我将在下篇博客进行阐述。
从 java 容器类的设计讨论抽象类和接口的应用
除了前面提到的一个问题:多态到底是用抽象类还是接口实现?我还看到有人评论说:现在都是提倡面向接口编程,使用抽象类的都被称为上世纪的老码农了。哈哈。看到这个说法我也是苦笑不得。不过,面向接口编程的确是一个趋势,java 8 已经支持接口实现默认方法和静态方法了,抽象类和接口之间的差异越来越小。闲话少说,我们开始讨论抽象类和接口的应用。
上图是 java 容器类的类继承关系。我们以容器类中
ArrayList
为例子来讨论抽象类和接口的应用。ArrayList 类继承关系
上图是
ArrayList
的类继承关系。可以看到,ArrayList
的继承关系中既使用了抽象类,也使用了接口。- 最顶层的接口是
Iterable
,表示这是可迭代的类型。所有容器类都是可迭代的,这是一个极高的抽象。 - 第二层的接口是
Collection
,这是单一元素容器的接口。集合,列表都属于此类。 - 第三层的接口是
List
,这是所有列表的接口。
通过三个接口,我们可以找到容器类的三个抽象特性,实现这些接口就意味着拥有这些接口的特性。
AbstractCollection
实现了Collection
中的部分方法。AbstractList
实现了AbstractCollection
和List
中的部分方法。
上面的抽象类提供了一些方法的默认实现,给具体类提供了复用代码。
纯抽象类实现
如果我们像一个老码农一样,用抽象类来实现上面的接口会有怎样的效果?那么,类图可能变成这样。
抽象类在这里存在着一个很大的问题,它不能多继承,在抽象的层次上没有接口高,也没有接口灵活。例如说:
List + AbstractCollection -> AbstractList Set + AbstractCollection -> AbstractSet
单纯用抽象类无法实现像接口一样灵活的扩展。
纯接口实现
如果我们像一个新码农一样,用纯接口来实现呢?
这样写理论上没有问题,实际写代码的时候问题就来了。所有的接口都要提供实现,于是你不得不在各个实现类中重复代码。
总结
经过上面的讨论,我们得出两个结论:
- 抽象类和接口并不能互相替代。
- 抽象类和接口各有不可替代的作用。
从容器类的类关系图中可以看到,接口主要是用来抽象类型的共性,例如说,容器的可迭代特性。抽象类主要是给具体实现类提供重用的代码,例如说,
List
的一些默认方法。抽象类和接口的使用时机
那么,什么时候该用抽象类,什么时候该用接口呢?
要解决上面的问题,我们先从弄清楚抽象类和接口之间的关系。首先,我们都知道类对事物的抽象,定义了事物的属性和行为。而抽象类是不完全的类,具有抽象方法。接口则比类的抽象层次更高。所以,我们可以这样理解它们之间的关系:类是对事物的抽象,抽象类是对类的抽象,接口是对抽象类的抽象。
从这个角度来看 java 容器类,你会发现,它的设计正体现了这种关系。不是吗?从
Iterable
接口,到AbstractList
抽象类,再到ArrayList
类。现在回答前面的问题:在设计类的时候,首先考虑用接口抽象出类的特性,当你发现某些方法可以复用的时候,可以使用抽象类来复用代码。简单说,接口用于抽象事物的特性,抽象类用于代码复用。
当然,不是所有类的设计都要从接口到抽象类,再到类。程序设计本就没有绝对的范式可以遵循。上面的说法只是提供一个角度来理解抽象类和接口的关系,每个人都会有自己的理解,有人认为两者一点关系都没有,这也有道理。总之,模式和语法是死的,人是活的。
-
java抽象类和接口有什么意义
2021-02-04 16:53:06为什么接口和抽象类不能实例化,为什么接口可以多个实现而抽象类只能单继承,特别是java8之后,抽象类和接口里面都可以写代码后,就更加分不清了,今天重新整理一下。 什么是抽象类(abstract class) 使用abstract... -
抽象类和接口的区别及使用场景
2018-07-09 10:22:53抽象类和接口的区别及使用场景 1.1 抽象类 1.2 接口 1.3 抽象类和接口的区别 1.3.1 语法层面上的区别 1.3.2 设计层面上的区别 1.4 什么时候使用抽象类和接口 抽象类和接口的区别及使用场景 1.1 抽象类 在... -
抽象类和接口使用场景与区别
2018-03-16 14:13:132 如果许多类实现了某个接口,那么每个都要用代码实现那些方法3 如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法则由各个子类去实现。所以,抽象类是... -
Java—抽象类与接口
2020-08-04 10:32:55抽象类实际上也是一个类,只是与之前的普通类相比,内部新增了抽象方法。 抽象类的基本概念 抽象方法是只声明而未实现的方法,所有的抽象方法必须使用abstract关键字声明,包含抽象方法的类也必须使用abstract class... -
Java:接口和抽象类,傻傻分不清楚?
2019-04-26 07:28:15再来聊聊接口和抽象类。 -
抽象类和接口的详解(实例)
2017-12-20 17:15:17抽象类和接口在我们的代码中,生活中息息相关,与上图所示,操纵复杂,密切相关,那么问题来了,何谓抽象类,何谓接口?带着这层薄纱,慢慢揭开这层薄纱;也许在古代,新婚之夜,透过这层薄纱,你看到的或者是惊喜,... -
抽象类和接口在项目中使用的实例
2018-10-06 19:10:06抽象类和接口在项目中经常使用如果使用恰当,可以大大精简代码 抽象类:指的是用abstract关键字修饰或者类中有抽象方法,那么这个类就是抽象类 特点: 抽象类用关键字 abstract修饰 抽象类的抽象方法没有方法体,在... -
接口和抽象类应用场景及比较
2019-04-12 17:45:312. 抽象类和接口的区别以及使用场景 3. 为什么要使用接口 - 接口的特性: 接口不是类,不能使用new运算符实例化一个接口,但是可以声明接口的变量,这个接口变量必须引用实现了接口的类对象 使用instanceof可以... -
抽象类和接口的相同点与区别
2018-06-12 11:45:03抽象类和接口的区别抽象类抽象方法:使用abstract修饰的方法,但是没有方法体(没有{ }),只有方法声明,抽象方法强制子类覆写。一旦一个类有了抽象方法,那么该类也必须声明为抽象类;抽象方法必须属于抽象类,... -
接口和抽象类的区别
2018-08-12 21:38:36接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。 抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。... -
实用抽象类和接口的区别
2016-09-29 20:39:26抽象类和接口又什么好处从这个问题我们可以衍生出两个问题:1.为什么要用抽象类?2. 为什么要使用接口?企业单位在面试的时候经常会问到!答案综合考虑以下方面:1:强调不但应该具有什么能力,而且应该具有什么特性... -
抽象类的作用和应用场景
2018-08-13 17:58:00抽象类的作用和应用场景: 抽象类的应用场景: 描述一类事物的时候,发现该事物确实存在着某种行为,但是目前该行为是不具体的,那么这时候我们应该抽取该方法的声明,不去实现该方法,这时候我们应该使用抽象类... -
java中抽象类与接口的区别
2017-10-14 15:08:27java中抽象类与接口的区别一、抽象类用abstract关键字修饰一个类时,这个类叫做抽象类,用abstract修饰一个方法时,这个方法叫做抽象方法。含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被... -
一文搞懂php中抽象类和接口。
2020-05-14 07:41:12抽象类 定义 1.用abstract 关键字来修饰一个类时,这个类就叫抽象类. 2.用abstract 关键字来修饰一个方法时,这个方法就是抽象方法. 应用场景: 1.在实际开发中,我们可能有这样一种类,是其它类的父类,但是它... -
JAVA中接口和抽象类的区别
2015-11-04 20:35:09JAVA中接口和抽象类的区别 学过C++的朋友应该知道,在C++中并没有显式地区分出接口这个概念,但是在C++中可以定义类似于JAVA中的接口的抽象类实现接口的功能。JAVA中将接口抽离出来,作为一个单独的形式存在,... -
Java的接口和抽象类(实例加UML完整例子)
2020-04-03 11:13:34Java的接口和抽象类 1.抽象类 1.1 语法 抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰 抽象类就是为了继承而存在的,如果你... -
面向对象高级——instanceof关键字的使用以及抽象类与接口的应用
2016-04-12 17:37:39instanceof关键字 需要掌握的要点: ...在Java中可以使用instanceof关键字判断一个对象到底是哪个类的实例。 对象 instanceof 类 —>返回boolean类型 代码验证如下: class A{ // 定义类A public -
接口的作用,和抽象类之间的选择
2017-03-22 17:43:16前俩天有个弟弟和我说他不理解接口,我心里想接口有啥不好理解。想到了平时项目中的应用。瞬间想到的了,为啥我要用接口?我都想不到它切实的优点,和使用的必要性。...这里主要说和抽象类的对比: -
接口和抽象类 Java
2016-06-30 11:22:19abstract class 和Interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,赋予了Java强大的面向对象能力,这两者之间有相似的地方但实际用法还是有很多不同。 1. 抽象类 在面向对象... -
抽象类 接口 匿名类的区别
2015-07-29 15:28:111 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体。但在某些情况下,某个父类并不需要实现,因为它只需要当做一个模板,而具体的实现,... -
Junit实现抽象类和接口类测试
2018-03-22 20:48:39Junit实现抽象类和接口类测试 简单的目录: Junit实现抽象类和接口类测试 Junit实现接口类测试 Junit实现抽象类测试(一) Junit实现抽象类测试(二) JUnit使用abstract类来进行测试 参考: Junit... -
重新认识java(八) ---- 抽象类与接口
2017-02-10 18:40:14你很清楚的知道什么时候用抽象类,什么时候用接口么? p.s. 多文字预警! -
夯实Java基础系列6:一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别!
2018-04-24 19:45:47本文主要介绍了三种代码块的特性和使用方法。 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 文章首发于我的个人博客: https://h2pl.github.io/2018/04/24/javase6 代码块:用{}包围的... -
接口和抽象类的前世今生
2015-01-07 16:44:05今天被人问了java的接口了抽象类的不同处,我回答的就是网上的常规答案是: 1、内容层面而言抽象类更丰富点: 抽象类可以有实体方法、可以有各种类型变量成员、可以有全部的访问级别;除了必须有抽象方法外,和常规... -
抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?
2020-10-18 22:02:42抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?