Java 抽象类与普通类的异同

 定义一个类时,常常需要定义一些成员方法用于描述类的行为特征,但是有时候类中的方法因为情况不同而无法确定。例如,定义一个Animal类中的shout 方法,因为不同动物的叫声是不同的,所以该方法的body部分无法详细的构建。

 针对以上的问题,java定义了一种新的方法:抽象方法,来满足这种需求。抽象方法是使用abstract方法修饰的成员方法,抽象方法在定义时不需要实现方法体。格式如下:

 abstract 返回值类型 方法名称(参数列表);

当一个类包含了抽象方法,该类就是抽象类。抽象类和抽象方法一样,必须使用abstract关键字进行修饰。抽象类的格式定义如下:

  abstract class 抽象类名称{

       属性;

       访问权限 返回值类型 方法名称(参数){   // 普通方法

                return(返回值);

}

访问权限 abstract 返回值类型 抽象方法名称(参数); // 抽象方法,无方法体

}

从上述格式可以看出,抽象类的定义仅仅比普通类多了一个或多个抽象方法,其他成分基本相同。

抽象类定义的规则如下:

  1. 包含抽象方法的类必须是抽象类
  2. 声明抽象类和抽象方法时都要使用abstract关键字修饰
  3. 抽象方法只需要声明而不需要实现
  4. 如果一个非抽象类继承了抽象类,那么该类必须重写抽象类中的全部抽象方法。

代码如下:

abstract class Animal{
    abstract void shout();
}
class Dog extends Animal{
    void shout(){
        System.out.println("汪汪汪");
    }
}
public class cn.edu.zut.cs.Example {
    public static void main(String[]args){
        Dog dog=new Dog();
        dog.shout();
    }
}

运行结果如下:

汪汪汪

注意:使用abstract关键字修饰的方法不能使用private修饰,因为子类只能重写父类中的public和protected方法。

注意看前面的黄色字体部分,今天在学习其他API的时候突然发现一段话,“抽象方法不能实例化对象”,那么那橘黄色的话就是错误的(学习就是这样的,不断地学习,不断的更正错误)。关于抽象类和普通类更为准确的异同如下:

①:抽象类以及抽象方法必须被abstract关键字修饰,普通类则不需要

②:含有抽象方法的类一定是抽象类,抽象类不一定含有抽象方法。

③:抽象类的子类必须全部实例化里面的抽象方法,否则子类也必须定义为抽象方法。

④:抽象类只能继承抽象类或者实现接口,普通类能继承抽象类与普通类

⑤:抽象类不能实例化对象而普通类可以

关于第五条:其实当你疑惑为什么抽象类不能实例化对象的时候,你还是没有领悟抽象类的真谛,抽象类是用于处理具有多种情况的类,要是直接实例化抽象类,怎么处理多种情况呢?所以正确的理解应该是,继承抽象类的多种子类实例化不同的对象,就比如:一个公司有多种职位,不同职位工资的计算方法不同,那么就可以定义一个抽象类:Employee,里面的抽象方法就是计算工资的方法,然后多个子类继承它,实现里面的方法。

关于第三条,我想做一下介绍:当你写一个子类继承抽象类时,编译器显示的修复方法为什么是把子类定义为抽象类?相信聪明的你一定能找到解决方法。

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值