JAVA基础知识|抽象类与接口类

一、抽象类

抽象类:拥有抽象方法的类就是抽象类,抽象类要使用abstract声明

抽象方法:没有方法体的方法,必须要使用abstract修饰

为什么要使用抽象类,抽象方法?

举例来说,如果你定义了一个类Person,此类中包含很多公共属性和方法。但是其中有一个方法,每个子类实现的方式都不同。比如“吃饭”这个方法,Child类中,“吃饭”使用勺子”,Adult类中,“吃饭”使用筷子。那么我们就在Person类中把这个方法定义好,就毫无意义。

public abstract class Person {

    //身高
    public double height;
    //体重
    public double weight;
    //年龄
    public int age;
    //名字
    public String name;

    //跑步
    public void run() {
        System.out.println("==跑步==");
    }

    //吃饭
    public abstract void eat();
}
View Code
public class Child extends Person {

    //构造函数
    public Child(String name, double height, double weight, int age) {
        this.height = height;
        this.weight = weight;
        this.name = name;
        this.age = age;
    }

    //无参构造函数
    public Child() {
    }

    //吃饭
    @Override
    public void eat() {
        System.out.println("==用勺子吃饭==");
    }
}
View Code
public class Adult extends Person {

    //构造函数
    public Adult(String name, double height, double weight, int age) {
        this.height = height;
        this.weight = weight;
        this.name = name;
        this.age = age;
    }

    //无参构造函数
    public Adult() {
    }

    //吃饭
    @Override
    public void eat() {
        System.out.println("==用筷子吃饭==");
    }
}
View Code

抽象类与普通类的区别?

1)抽象类中的抽象方法必须声明为public或protected类型,如果声明为private或者friendly类型,子类不能继承使用,没有意义

2)抽象类不能创建对象,Person person = new Person();

3)如果子类继承了抽象类,则必须实现抽象类中的抽象方法。如果不实现,则必须将子类也声明为抽象类

二、接口

接口:在Java编程语言中是一个抽象类型,是抽象方法的集合

接口并不是类,虽然写法很相似。类描述对象的属性和方法,接口则包含类要实现的方法

接口表现的是一种能力,如果类实现了接口,表明这个类也具备了接口所要表现的能力

接口特性:

1)接口中的所有方法都是抽象方法,默认修饰符是public abstract(也只能是public abstract)

2)接口中也有变量,默认修饰符是public static final(也只能是public)

3)接口可以继承接口,而且可以多继承

三、抽象类与接口区别

语法区别:

1)抽象类中可以有非抽象方法,接口中的方法必须都是抽象方法

2)抽象类中的变量可以是各种类型的,接口中的变量只能是public static final类型的

3)抽象类中可以有静态代码块和静态方法,接口中不可以

4)一个类只可以继承一个抽象类,但是可以实现多个接口

设计区别:

抽象类是对一种事物的抽象,即对类抽象。而接口是对行为的抽象。

抽象类是对整个类整体进行抽象,包括属性行为,但是接口却是对类局部(行为)进行抽象。

举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。

从这里可以看出,继承是一个 “是不是”的关系,而接口实现则是 “有没有”的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。

转载于:https://www.cnblogs.com/maikucha/p/8337133.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值