抽象类和接口(Abstract and Interface)精湛细节

简介: 抽象类和接口(Abstract and Interface)精湛细节

抽象类和接口

abstract

语法格式

[修饰符列表] abstract class 类名{
          类体;
}


重要细节

抽象类不能实例化对象

//抽象方法不能有方法体 {},即不能new实现
public abstract void eat();


抽象类是存在构造函数的,其构造函数是提供给子类创建对象的时候初始化父类的属性的。


抽象方法就是没有实现的方法 (父类方法如果具有不确定性,我们可以考虑将其设计为abstract),


所谓没有实现就是没有方法体


一个类中存在抽象方法,那么这个类必须声明为抽象类


抽象类可以没有抽象方法,抽象方法一定在抽象类中


abstract只能修饰抽象类和抽象方法


抽象类还是类!可以有任意成员


如果一个类继承了抽象类,则必须实现抽象类中的所有抽象方法,或者它也声明为抽象类

//~比如
abstract class Animal{
public abstract void fly();
}
/* one
abstract class bird extends Animal{
}*/
// two
class Brid extends Animal{
@Override
    public void fly() {
    }
}

抽象方法不能使用private、final和static(和重写无关)关键字修饰,很明显这是违背abstract的初衷的


interface

语法格式

[修饰符列表] interface 接口名{}{
}
class 类名 implements 接口{
}

重要细节:

like-a  (继承是is-a)符合标准的可以考虑设计为接口


接口是完全抽象的。(抽象类是半抽象)也可以说接口是特殊的抽象类。


语法格式:[修饰符列表] interface 接口名{}


抽象类实现接口的话,可以不实现接口中的方法


接口支持多继承,一个接口可以继承多个接口,担任各自功能,解耦性强--比如电脑同时有多个USB接口,来分担不同的功能


接口也是一种“引用数据类型”,编译之后是一class字节码文件。


接口中主要包含两部分内容,一部分是:常量。一部分是:抽象方法。在JDK8之后接口类可以有静态方法,默认方法,也就是说接口可以有方法的具体实现,但是需要加default关键字修饰


60d39164330a2c1ae96bee97b60916ca.png


   接口中所有的元素都是public修饰的。在下面案例可以看到-->冗余


   接口中的抽象方法定义时:public abstract修饰符可以省略

021b734ef866453994a8e448aa5a366c.png


   接口中常量的public static final也是可以省略的


   (即写一个数据类型就会默认加上public static final)

709a3c2748f8161acddc9969b3a9c94e.png


相关文章
|
6月前
|
Java
接口和抽象类的区别
接口和抽象类的区别
92 6
|
6月前
|
Java
抽象类和接口有什么区别?
抽象类和接口有什么区别?
|
2月前
|
C# 索引
C# 一分钟浅谈:接口与抽象类的区别及使用
【9月更文挑战第2天】本文详细对比了面向对象编程中接口与抽象类的概念及区别。接口定义了行为规范,强制实现类提供具体实现;抽象类则既能定义抽象方法也能提供具体实现。文章通过具体示例介绍了如何使用接口和抽象类,并探讨了其实现方式、继承限制及实例化差异。最后总结了选择接口或抽象类应基于具体设计需求。掌握这两者有助于编写高质量的面向对象程序。
112 5
|
6月前
|
Java
抽象类和接口的区别
抽象类和接口的区别
83 0
|
11月前
|
程序员 C#
C# 类实现接口(Interface) 多态 多继承
C# 类实现接口(Interface) 多态 多继承
|
Java
Java面向对象 接口(interface)的详解
Java面向对象 接口(interface)的详解
96 0
接口和抽象类有什么区别
接口和抽象类有什么区别
57 0
|
Java 开发者
抽象类(abstract class)和接口(Interface)的区别
还在等什么,快来一起讨论关注吧,公众号【八点半技术站】,欢迎加入社群
|
Java
接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
有一个面试四连击的题目:接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
159 0
接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?