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();
}
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("==用勺子吃饭==");
}
}
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("==用筷子吃饭==");
}
}

抽象类与普通类的区别?

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类即可。

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

上一篇:JavaScript-Jquery实现全选反选


下一篇:python 自动化之路 day 01 人生若只如初见