【Java基础】抽象类和接口

文章详细介绍了Java中的抽象类和接口的概念、区别及使用场景。抽象类用于定义公共行为,不允许实例化,可包含抽象方法和普通成员。接口则是一种行为规范,只能包含抽象方法和常量,用于多继承。类可以实现多个接口,但只能继承一个抽象类。通过实例展示了如何使用抽象类和接口来实现不同对象的特定功能。
摘要由CSDN通过智能技术生成

目录

一. 抽象类

1.1 什么是抽象类

1.2 抽象类与普通类的区别

1.3 抽象类的作用

1.4 抽象类的特点

 二. 接口

2.1  什么是接口 

2.2  接口的语法和特性

2.3 接口的使用

2.4 接口的实例

 三. 接口和抽象类的区别


一. 抽象类

1.1 什么是抽象类

 由关键字 abstract 修饰的,且类中的抽象方法不能具体实现的类 ,称之为抽象类。

抽象类中可以有抽象方法语法:修饰符  abstract  返回值类型  方法名(){ }

1.2 抽象类与普通类的区别

(1)成员:抽象类中可以有普通成员,也可以有抽象方法;普通类只能有普通成员。

(2)关键字:抽象类由关键词所abstract修饰,普通类没有关键字abstract修饰。

(3)继承:抽象类必须被继承,且子类要重写父类中的抽象方法;普通类不需要被继承。

1.3 抽象类的作用

在一些情形下,多个类要去做同一种任务,但是各自完成的事情又有所差异,这时就可以写一个抽象类作为父类,在父类中写一个抽象方法,将所有子类都要做的共同的任务建立起来,但不做具体实现;子类继承父类后重写父类的抽象方法,来完成方法的具体实现。这样可以起一个预防和规范作用,防止用户犯下一些不经意的错误。

例如,多个类要去完成画图形的任务,三角形类完成画三角形,圆形类完成画圆形,矩形类完成画矩形。写一个抽象类作为父类,在父类中写一个抽象方法将画图形任务建立起来

abstract class Shape{
    public abstract  void drawShape();
}

子类继承抽象类后,要重写父类的抽象方法,来具体实现方法

class Triangle extends Shape{
    @Override
    public void drawShape() {
        System.out.println("画三角形!");
    }
}
class Circle extends Shape{
    @Override
    public void drawShape() {
        System.out.println("画圆形!");
    }
}
class Rect extends Shape{
    @Override
    public void drawShape() {
        System.out.println("画矩形!");
    }
}

1.4 抽象类的特点

(1)抽象类不可以实例化对象。

(2)抽象类中,抽象方法不能被private,static,final 修饰,因为父类的抽象方法是要在子类中被重写的 。

abstract class Shape{
     public abstract  void drawShape();//若不加修饰符,默认是public,不能被private修饰
}

 二. 接口

2.1  什么是接口 

在生活中,电脑上的的USB,插板上的插孔等都是接口,这些接口都是通用的,只要外部设备的制作标准是规范的,都可以正常插入接口进行使用。因此接口起到了一个行为规范作用,是公共行为的标准。在Java中,接口是多个类的规范标准,是一种引用数据类型

2.2  接口的语法和特性

(1)定义:接口的定义与类的定义相似,将class替换为interface即可。

interface IFinish{
   
}

(2)变量:接口中,变量都默认为 public static final修饰的变量。

(3)方法:接口中,只能写抽象方法,不能写普通方法,因此接口中的方法不能具体实现

interface IFinish{
    void draw();//方法默认为abstract public修饰,可以不写
    int a = 3;//变量默认为public static final 修饰,变量要就地初始化

}

(4)接口中不能有静态代码块和构造方法。 

2.3 接口的使用

(1)接口不能直接使用,要通过类来实现接口,用到implements关键字,类实现接口的时候要重写接口中的抽象方法。

interface IFinish{
    void draw();//方法默认为abstract public修饰,可以不写
}

class Triangle extends Shape implements IFinish{
    @Override
    public void drawShape() {
        System.out.println("画三角形!");
    }
    @Override
    public void draw() {
        System.out.println("接口功能!");
    }
}

(2)一个类能可以实现多个接口,中间用逗号隔开。实现每一个接口,都要重写每个接口的抽象方法。

interface IFinish1{
    void draw1();//方法默认为abstract public修饰,可以不写
}

interface IFinish2{
    void draw2();//方法默认为abstract public修饰,可以不写
}

class Triangle extends Shape implements IFinish1,IFinish2{
    @Override
    public void drawShape() {
        System.out.println("画三角形!");
    }
    @Override
    public void draw1() {
        System.out.println("接口1!");
    }
    @Override
    public void draw2() {
        System.out.println("接口2!");
    }
}

2.4 接口的实例

分别定义一个Fish类和Bird类,鱼和鸟都会吃,但鱼会游泳,鸟会飞,写三个接口分别建立 吃,游泳,飞  这三个功能,鱼类可以实现吃和游泳的接口,鸟能可以实现吃和飞的接口,不同的对象可以实现不同的功能。

interface IFlying{
    void fly();
}
interface IEating{
    void eat();
}
class Fish implements ISwimming,IEating{
    public String name;
    public Fish(){
        this.name = "小鱼";
    }
    @Override
    public void swim() {
        System.out.println(this.name+"在游泳!");
    }

    @Override
    public void eat() {
        System.out.println(this.name+"在吃鱼食!");
    }
}
class Bird implements IEating,IFlying{
    public String name;
    public Bird(){
        this.name = "小鸟";
    }
    @Override
    public void fly() {
        System.out.println(this.name+"在飞!");
    }

    @Override
    public void eat() {
        System.out.println(this.name+"在吃鸟食!");
    }
}
public class Abstract {
    public static void main(String[] args) {
        Fish fish = new Fish();
        fish.swim();
        fish.eat();
        System.out.println("===================");
        Bird bird = new Bird();
        bird.fly();
        bird.eat();
    }
}

 三. 接口和抽象类的区别

(1)关键字:接口的关键字 interface,抽象类关键字 abstract。

(2)成员:抽象类中可以有普通成员,也可以有抽象方法;接口只能有抽象方法,没有普通方法,并且接口中的变量都是默认为pulic static final修饰的变量。

(3)继承和实现:一个类只能继承一个抽象类,但可以实现多个接口。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值