【面向对象】抽象类、抽象方法

抽象方法

引入继承的思想,将共性的方法抽取到父类后,由于每个子类的方法执行内容各不相同,所以需要对每个子类的方法进行改写,此时的父类中被继承的方法体并不能确定具体内容,那么该方法就可定义为抽象方法

 定义格式

public abstract 返回值 方法名 (形参);


 

抽象类

 定义了抽象方法的类必须也为抽象类,即用 abstract 修饰一个方法后,其所在的类也必须用 abstract来修饰。

public abstract class Animal {
    //成员变量
    //成员变量
    public abstract void eat(String something);
}

 定义格式

public abstract class 类名 { }


 

 抽象类的注意事项

 1.抽象类不可以创建对象

可以看到创建对象将会报错

public abstract class Animal {

    Animal S= new Animal();//此时new Animal 报错
}

 删除 abstract 后,Animal 的对象可正常创建

public  class Animal {

    Animal S= new Animal();
}

2.抽象类中不一定有抽象方法,但有抽象方法一定是抽象类

3.抽象类的子类 

 要么重写抽象类中的所有抽象方法,要么是抽象类,其中,重写抽象类中的所有方法最为常用,见下文

 


 为什么要整抽象方法和抽象类

格式统一

  每个动物都会喝水,所以将猫和狗共性的方法 “喝水” 抽取到父类,而 “eat” 吃的方法却不能抽取,因为猫与狗吃的东西各不相同,“eat” 动作应该是每个动物所独有的方法,但是这样有很大的弊端,假如多个程序员同时编写此项目,他们对于 “eat” 方法所编写的格式也不尽相同,最终在test中运行时需要查看每个动物的 “eat” 方法是如何编写的,有无返回值?形参接收的是什么?实参该怎样写?最终调用每个动物的 “eat” 方法时都需要去子类查看 “eat”的格式,如此一来,动物种类一多,可能让大脑cup当场炸裂。

 解决方法:将 "猫吃" 与 “狗吃” 中的 “吃” 抽取到父类并定义为抽象方法,让子类继承父类的 “eat” 方法并强制按照父类中的格式对其进行重写,这样,所有子类的 “eat” 内容各不相同,而格式都完全相同,日后在测试运行调用每个动物的 “eat” 方法时无需查看每个动物的 “eat” 格式,只需查看父类中的方法格式即可。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值