作者:云都小生
概述
面向对象的特性之一就是抽象,而在Java中有两种形式是用来体现这一种抽象思想的。现在我们需要来认识一下,其中一个强大的新概念——抽象类。
在软件开发中,开发过程中经常会碰到这样的场景——一个父类的方法并不确定,不同的子类实现的方式不一样。
例如,动物都有叫的方法,但是不同动物叫的方式不一样,所以我们可以先让这个方法变成“不确定”,让不同的动物去实现各自叫的方式。
这两种情况下,我们都可以考虑将类定义成抽象类。
语法
不管是在Java还是在C#中,都采用abstract来修饰抽象类。
abstract class 类名
{
}
这就是一个抽象类最基本的框架。
我们可以在抽象类中定义普通方法,也可以在抽象类中定义抽象方法。
[public|protected] abstract class 类名
{
public void method1()
{
//代码块
}
abstract void method2();
}
由于method1的方法我们已经是确定的,所以我可以在抽象类中定义。但是,由于method2方法还不确定,我们希望子类再去补充这个方法,所以我们修饰成抽象方法。
需要注意的重要三点是
声明了抽象方法的类,必须是抽象类。
抽象类是为了继承而存在的,因为抽象类不能被实例化,只有它的子类才能被实例化。
子类在继承抽象父类的时候,必须实现抽象类中的抽象方法。
在其他方面,其实抽象类与普通的类一样,包括继承之后,子类自动拥有父类非private的属性和方法等继承特性。
案例
public abstract class Animal
{
String name;
abstract void bray();
}
public class Dog extends Animal
{
void bray() {
System.out.println("汪汪汪");
}
}
public class Cat extends Animal
{
void bray() {
System.out.println("喵喵喵");
}
}
在抽象类Animal中,定义了一个抽象方法bray(),它的子类Dog、Cat在继承这个Animal后,就必须去实现这个方法。
2018/4/19 13:52:07 @Author:云都小生