抽象类 接口

(一)抽象类 abstract(extends)

(是对事物的抽象)
动物是抽象的,猫狗是具体的
在java中,一个没有方法体(具体实现)的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类
抽象类的特点
1.抽象类和抽象方法必须使用abstract关键字修饰
public abstract class 类名{}
public abstract void eat();
2.抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
3.抽象类不能直接实例化(只能被用作父类来派生子类)
抽象类如何实例化?参照多态的方式,通过子类对象实例化,这叫抽象类多态

抽象类具有以下特点:

  1. 抽象类不能被实例化,只能被用作父类来派生子类。
  2. 抽象类可以包含抽象方法,这些方法没有具体的实现,需要在子类中实现。
  3. 抽象类可以包含普通的方法和成员变量。
  4. 子类继承抽象类时,必须实现抽象类中的所有抽象方法,除非子类也声明为抽象类。
  5. 抽象类可以有构造方法,但是不能用来实例化抽象类,只能用来被子类调用。
  6. 可以有抽象类的引用,但是必须指向一个具体子类的实例。
    总之,抽象类是一种不能被实例化的类,用来作为其他类的父类,其中可以包含抽象方法和具体方法。

抽象类的成员特点
①成员变量:可以是变量,也可以是常量
②构造方法:
有构造方法,但是不能实例化
那么其构造方法的作用是什么呢?用于子类访问父类数据的初始化
③成员方法:
可以有抽象方法:限定子类必须完成某些动作
也可以有非抽象方法:提高代码复用性

抽象方法的特点:

  1. 抽象方法没有方法体,只有方法声明。
  2. 抽象方法必须在抽象类中声明。
  3. 抽象方法用abstract关键字修饰。
  4. 子类必须实现抽象方法,否则子类也必须声明为抽象类。

(二)接口 Interface(implements)

(是对行为的抽象)
接口就是一种公共的标准规范,只要符合规范标准,大家都可以通用
(接口中的方法都是公开的是因为接口是用来定义一组公共的规范和行为的。这意味着任何实现了接口的类都需要提供接口中定义的方法的具体实现,并且这些方法需要对外部可见,以便其他类可以通过接口来调用这些方法。)
Java中的接口更多的体现在对行为的抽象(本身也是一个抽象的内容)

接口的特点:
接口用关键字interface修饰:public interface 接口名{}
类实现接口用:implements 接口名 {}
接口的实例化参照多态的方式,通过实现类对象实例化,叫接口多态
   多态的形式:具体类多态,抽象类多态,接口多态
   多态的前提:有继承/实现关系
      有方法重写;
      有父(类/接口)引用指向(子/实现)类对象
接口的实现类:要么重写接口中的所有抽象方法/要么是抽象类

接口的成员特点:

  1. 成员变量:
        只能是常量
        含默认修饰符(可以省略括号中内容)(public static final) int num = 3;
        常量且静态修饰,可以通过接口名直接调用
  2. 构造方法:
        接口无构造方法(因为接口主要是对行为进行抽象的,是没有具体存在)
  3. 其实现类:
    (类Object是类层次结构的根,每一个类都有Object作为超类。对所有对象(包括数组)都实现了这个类的方法)
    (一个类如果没有父类,默认继承自Object类)
        public class InterImpl (extends Object) implements Inter{}
  4. 成员方法:
        只能是抽象类
        含默认修饰符(public abstract)void method();

接口组成更新

接口的组成
常量:public static final
抽象方法:public abstract

默认方法(Java 8)
静态方法(Java 8)
私有方法(Java 9)

(1)接口中默认方法

1
2
//范例:使用关键字 default (public可省略)
default void show{}

默认方法不是抽象方法,所以不强制被重写;但是可以被重写,重写的时候去掉default关键字。
(其实现类可使用default方法,且不强制重写)
public可以省略,default不能省略。

(2)接口中静态方法

1
2
//范例:使用关键字 static(和类中的方法定义一致)(public可省略)
static void show(){}

静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
public可以省略,static不能省略

(3)接口中私有方法

1
2
3
//范例
private void show(){}
private static void method(){}

默认方法可以调用私有的静态方法和非静态方法
静态方法只能调用私有的静态方法(静态方法不能访问非静态的变量和方法)


(写抽象类比写接口要方便)
(抽象类中有给我们提供的默认使用,尽管啥都没有)
(抽象类可以要哪个就重写哪个即可)
(如果是接口都需要重写)

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023-2025 Annie
  • Visitors: | Views:

嘿嘿 请我吃小蛋糕吧~

支付宝
微信