推荐学习专栏:Java 编程进阶之路【从入门到精通】,从入门到就业精通,买不了吃亏,买不了上当!!
文章目录
- 1. 抽象类
- 2.接口
- 3. 抽象类和接口对比
- 4. 总结
- Java基础教程系列文章
1. 抽象类
前面说到,Java 编程以对象为单位,我们把具有相同属性和行为的事物抽象成一个类,这个类的实例化叫做对象,那么什么是抽象类呢?
抽象类往往用来表示设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
比如前面我们把动物抽象为一个类,但是现实中并没有一个事物叫动物,它只是一类事物的总称,并不是一个实体,这种情况下我们把它定义为抽象类。
语法格式:
修饰符 abstract class 类名(){
//……
abstract 方法名();
}
abstract 修饰符修饰类时,这个类就是抽象类,修饰方法时,这个方法就是抽象方法。
需要注意的是,含有抽象方法的类一定是抽象类,抽象类不能实例化对象,且必须被继承,抽象方法只需声明不用实现且一定要在子类中重写,否则子类仍为抽象类。
由于抽象方法一定要被继承,所以 abstract 不能与 final 同时修饰一个类。抽象方法必须被重写,所以 abstract 不能与 private,static,final 并列修饰同一方法。
示例:
abstract class Animal {
public abstract void walk();
//...
}
class Cat extends Animal {
//...
public void walk(){
System.out.println("小猫在走路...");
}
}
public class Test {
public static void main(String[] args) {
Cat cat=new Cat();
cat.walk();
}
}
2.接口
Java 接口是一些方法声明的集合,一个接口只有方法的声明没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。
Java 接口用来实现多态,一个类可以实现多个接口,解决了单继承的问题。
定义接口:
[访问控制符] interface <接口名>{
类型标识符final 符号常量名n = 常数;
返回值类型 方法名([参数列表]);
…
}
实现接口:
[访问控制符] class 类名 [implements <interface>[,<interface>]*],]
{
//类体,必须实现接口中的方法
}
我们可以把接口看做特殊的抽象类,在这个抽象类中只能定义抽象方法和常量。接口有以下的特点:
- 接口里的成员属性全部是以 public(公开)、static(静态)、final(最终) 修饰符修饰
- 接口里的成员方法全部是以 public(公开)、abstract(抽象) 修饰符修饰
- 接口里不能包含普通方法
- 子类继承接口必须实现接口里的所有成员方法,除非子类也是抽象类
示例:
interface Walk{
//...
public void walk();
}
interface Sing{
//...
public void sing();
}
class Dog implements Walk,Sing{
//...
@Override
public void walk() {
System.out.println("小狗在走路...");
}
@Override
public void sing() {
System.out.println("小狗在唱歌...");
}
}
public class Test {
public static void main(String[] args) {
Dog dog=new Dog();
dog.walk();
dog.sing();
}
}
3. 抽象类和接口对比
上面说到可以把接口看做一个只有抽象方法和常量的抽象类,那么抽象类和接口有什么不同呢?
类和抽象类代表一类实体,类可以被实例化,而抽象类不可以实例化,接口并不能代表一类实体,只能代表功能或者属性。在应用时,已经很具体没有再抽象的必要使用单继承,而我们把独特的需要独立出来的功能或者属性封装在接口中。
4. 总结
这篇文章浅谈了抽象类和接口的实现以及两者的共同点和不同之处,关于Java面向对象基础教程系列就这么多内容,下一篇文章再谈一谈 Object 类,Java中 Object 是所有类的祖先,其重要性不言而喻!
Java基础教程系列文章
【Java编程进阶】花费数小时,带你学透Java数组,这些常用方法你还记得吗?
【Java编程进阶】面向对象思想初识
【Java编程进阶】封装继承多态详解
欢迎订阅学习Java编程进阶之路专栏,专栏文章持续更新!