Java中抽象类和接口的区别及应用场景

        下面会简单介绍抽象类和接口的定义,并根据它们的属性,了解他们的区别,同时也会引导出他们的适用场景。如有缺陷请斧正。

抽象类

        定义: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方法的具体实现细节,就用接口

在面向对象编程,我们首先定义几个类来表示现实世界的实体和行为。以下是一个简单的Java代码示例,展示了如何根据面向对象的思想实现“张三开车去公司”这个场景。 首先,我们定义一个`Person`类来表示人这个实体: ```java public class Person { private String name; public Person(String name) { this.name = name; } public void drive(Vehicle vehicle) { System.out.println(name + "正在开车。"); vehicle.move(); } } ``` 接着,定义一个`Vehicle`抽象类来表示交通工具,它包含一个`move`方法,这个方法在不同的子类会具体实现: ```java public abstract class Vehicle { public abstract void move(); } ``` 然后,我们可以创建一些具体的交通工具子类,例如`Car`类: ```java public class Car extends Vehicle { @Override public void move() { System.out.println("汽车正在行驶。"); } } ``` 现在,我们可以创建一个`Person`对象来代表张三,并且让他开一辆车: ```java public class Main { public static void main(String[] args) { Person zhangSan = new Person("张三"); Car car = new Car(); zhangSan.drive(car); } } ``` 在这个示例,`Person`类有一个`drive`方法,它接受一个`Vehicle`类型的参数。这意味着张三可以驾驶任何继承自`Vehicle`的交通工具。在这个场景,我们创建了一个`Car`对象,并让张三去开车,这会输出:“张三正在开车。”和“汽车正在行驶。”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值