博客作业4(抽象类 接口)
一、抽象类
在继承的层次结构中,每个新子类都是使类变得越来越明确和具体,如果从一个子类追溯到父类,类就会变得更通用、更加不明确。类的设计应该确保父类包含它的子类的共同特征,有时候,一个父类设计得非常抽象,以至于他都没有任何具体的实例,这样的类称为抽象类。
1.代码举例
- 在Java语言中使用abstract class来定义抽象类。
public abstract class university {}
- 使用继承来实现
public class Student extends university {
@Override
public void show() {
System.out.println("重写父类的抽象方法");
}
}
二、抽象类总结
- 抽象方法不能包含在非抽象类中
- 抽象类不能使用new操作符来初始化
- 包含抽象方法的类必须是抽象的
- 子类可以覆盖父类的方法并将它定义为abstract
- 即使子类的父类是具体的,这个子类也可以是抽象的
- 不能使用new操作符从一个抽象类创建一个实例
三、接口
接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
在java中接口被看作是一种特殊的类,每个接口都被编译为独立的字节码文件。使用接口或多或少都有点像使用抽象类。
类和接口的关系称为接口继承,因为接口继承和类继承本质上都是相同的,所以我们都将他们简称为继承。
1.代码举例
Interface关键字用来声明一个接口。例如:
[可见度] interface 接口名称 [extends 其他的接口名] {
// 声明变量
// 抽象方法
}
接口使用:
public interface shop {
// 定义2个抽象方法
public void food();
public void clothes();
}
//实现接口shop
public class ShopImp implements shop {
// 必须重写接口的全部抽象方法
@Override
public void run() {
System.out.println("售卖食物");
}
@Override
public void clothes() {
System.out.println("售卖服装");
}
}
public class Test {
public static void main(String[] args) {
//声明对象
ShopImp p=new ShopImp();
//调用实现的方法
p.food();
p.clothes();
}
}
四、接口和抽象类的区别
-
抽象类中有构造方法,接口没有
-
抽象类要被子类继承,接口要被类实现
-
抽象类和接口都不能直接实例化
-
抽象类可以有普通方法,接口只能抽象方法
-
抽象类的成员变量可以是什么类型,接口默认public static final
-
接口没有静态代码块和静态方法,抽象类可以有
-
一个类只能继承一个抽象类,一个类可以实现多个接口,一个接口可以继承多个接口