面向对象编程之—抽象类和接口

本文详细探讨了Java中的抽象类和接口,包括它们的概念、关键字、使用原则和实际应用。抽象类作为普通类的超集,强调强制子类实现抽象方法。接口则更为抽象,用于定义规范和行为,支持多实现。Java内置的Comparable和Cloneable接口分别用于对象比较和克隆。理解两者之间的区别有助于更好地设计和实现面向对象程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、抽象类

1.概念

抽象方法:

2.abstract关键字

3.抽象类三个原则

1)抽象类无法直接实例化对象,得通过向上转型实例化

2)抽象类仍然可以有构造方法,普通方法等

3)final abstract能否同时出现?private abstract能否同时出现?

4.抽象类意义

5.抽象类的局限

二、接口

1.概念

2.定义接口—interface关键字

1)定义

2)实现接口

3.使用原则

1)接口中只有public权限,接口中只有全局常量和抽象方法

2)接口的多实现:接口没单继承限制,一个子类可以同时实现多个接口

3)一个接口可以使用extends继承多个父接口

4)子类若同时继承父类,实现接口

4.接口的应用

1)定义规范、标准

2)表示一种能力或行为

5.JDK内置的两大接口

1)java.lang.Comparable:比较接口

2)java.lang.Cloneable:克隆接口

三、接口(interface)和抽象类(abstract)的区别


一、抽象类

面向对象编程三大特性—封装、继承和多态_林纾y的博客-优快云博客

1.概念

        抽象类是普通类的超集(普通类有的抽象类都有),只是比普通类多了一些(0~N)抽象方法,抽象类abstract修饰。现实生活中,抽象类很多(无法映射到具体的对象的类),如人类,动物类...

抽象方法:

        父类当中的方法,被他的子类们重写,子类的各自实现又不一样。那么父类的方法声明和方法体,只有声明还有意义,而方法体内容则没有存在的意义。我们把这种没有方法体内容的方法称为抽象方法。Java语言规定,如果一个类包含了抽象的方法。那么该类就是一个抽象类。

抽象方法:只有声明、没有方法体{}的方法

public abstract void print();//抽象方法

public void print(){}//普通方法

抽象类:包含抽象方法的类

修饰符 abstract class ClassName {
    public abstract void print();   
}

2.abstract关键字

        在java中,使用abstract表示抽象类和抽象方法,抽象方法所在类一定是抽象类。

使用abstract关键字修饰成员方法,该方法就成了抽象方法:
修饰符   abstract 返回值类型  方法名(参数列表);
public abstract void run();
public abstract void eat();
public abstract void jump(); 
public abstract void print(); 

3.抽象类三个原则

1)抽象类无法直接实例化对象,得通过向上转型实例化

Sharp sharp=new Sharp();//❌

A a=new B();//✔✔

        子类继承抽象类,必须覆写抽象类中的所有抽象方法(前提:子类是普通类),当子类也是抽象类,可以选择不覆写抽象方法

public abstract class Triangle extends Sharp{//子类Triangle也是抽象类
}

2)抽象类仍然可以有构造方法,普通方法等

        普通类有的,抽象类也有,子类仍然遵循对象的实例化流程(先调用父类构造方法)

3)final abstract能否同时出现?private abstract能否同时出现?

        final修饰的类不能有子类,而abstract修饰的类必有子类,矛盾,不可。private修饰的方法是当前类内部可见,说明子类没法覆写,abstract修饰的抽象方法必须被覆写,矛盾,不可

4.抽象类意义

抽象类最大意义就是强制要求子类(子类是普通类时)必须覆写抽象方法,保证多态正确运行

5.抽象类的局限

1)子类继承抽象类,仍然满足is a原则(继承原则)

2)抽象类仍然是类,是单继承局限,一个类(子类)只能继承一个抽象类(父类)

所以,也就有了更混合的结构:接口

二、接口

1.概念

        接口就是比“抽象类"还“抽象”的“抽象类”, 可以更加规范的对子类进行约束。全面地专业地实现了规范和具体实现的分离。接口是完全面向规范的,规定了一批类具有的公共方法规范,接口就是一个契约、协议。

        从接口的实现者角度看,接口定义了可以向外部提供的服务。

        从接口的调用者角度看,接口定义了实现者能提供哪些服务。

        接口和实现类不是父子关系,是实现规则的关系。比如:我定义一个接口Runnable , Car实现它就能在地上跑, Train实现它也能在地上跑,飞机实现它也能在地上跑。就是说,如果它是交通工具,就定能跑,但是一定要实现Runnable接口。

2.定义接口—interface关键字

1)Java中使用interface关键字定义接口接口中只有全局常量和抽象方法(JDK8之前,JDK8扩展了default方法)

2)子类使用implements实现接口

3)一般接口命名使用大写I开头和类做区分,子类实现接口可以使用impl结尾,表示是接口的子类

1)定义

格式:

[访问修饰符号] interface 接口name [extends 父接口1,父接口2] {

        常量定义:

        方法定义:

}

//interface定义了一个IMessage接口
public interface IMessage {
    //全局常量-⭐在 Java 接口中声明的变量其实都是常量,接口中的变量声明,将隐式地声明为 public、static 和 final,即常量,所以接口中定义的变量必须初始化
    public static final int NUM=100;
    //抽象方法-⭐方法的声明不需要其他修饰符,在接口中声明的方法&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值