多态2
一.类和类之间的依赖关系
依赖是类和类之间的一种非常常见的关系
比如:程序员 依赖 电脑 人 依赖 交通工具
但是有些依赖关系容易混淆,比如是遥控器依赖电器不是电器依赖遥控器
因为遥控器离开了电器,那么它的存在就没有意义
但是电器一旦打开,即使不依赖遥控器它也能正常工作,比较电器的共工作是通过其本身的线路和工作器件完成,而不是遥控器。
存在强依赖关系和弱依赖关系,通过实例来说明
比如:
出租车司机对车就是一个强依赖的关系(出租车司机的很多行为都是离不开车的存在,所以是强依赖关系)强依赖关系一般在类中用成员来引用
学生对车就是一个弱依赖的关系(学生只是在需要的时候偶尔用一下车而已就是弱依赖关系)弱依赖关系一般在类中只需要在行为(方法)的形参里面引用
//针对依赖关系比较弱的时候
public class Student {
//旅行
public void goHome(Car car) {
car.run();
System.out.println("回老家用车。。。");
}
}
//针对依赖程度比较强的情况
public class TaxiDriver {
private Car car;
public TaxiDriver (Car car) {
this.car=car;
}
public TaxiDriver () {}
//旅行
public void travel() {
car.run();
System.out.println("出租车司机在旅行...");
}
//工作
public void work() {
car.run();
System.out.println("在工作载客...");
}
}
对象之间存在联系(依赖关系),从一个好的软件设计的角度来说,我们希望这种依赖关系不要过于紧密(耦合过高),理想情况我们希望这种耦合变成0 ,问题发生的原因:因为车(被依赖方)的变化造成人(依赖方)也发生巨大的变化,严重违背了软件设计的开闭原则
小技巧:在子类重写的方法的上面加上一个注解:@override,作用是在编译期起到一个语法检查的作用,也可以使用开发工具中提供的快捷键进行操作
@Override
public void run1() {
System.out.println("轿车在路上跑....");
}
解耦的原则:依赖倒置 我们不要直接去依赖具体,尽量去依赖抽象,因为抽象的东西比具体的东西更加稳定,我们依赖的一方稳定了我们自身才能变得更加稳定
二.abstract关键字的使用
如果一个方法无法实现,可以将这个方法定义为抽象方法,在方法声明时使用abstract关键字对该方法进行修饰
抽象方法才能没有方法体
抽象方法必须定义在抽象类中,抽象方法不能有方法体
public abstract void run() ;
子类继承了一个抽象的父类,必须对父类中定义的抽象方法进行强制实现,除非这个子类自己本身也是抽象的
public class Ship extends Vehicle{
@Override
public void run() {
System.out.println("船在水中游...");
}
}
//子类自己也是抽象的
public abstract class FlyableVehicle extends Vehicle{
}
抽象类无法实例化对象
Vehicle vehicle=new Vehicle();//报错 抽象的概念在实际生活中根本就没有对应对象
抽象方法必须位于抽象类,但是抽象类中可以存在非抽象的方法
问题:抽象的父类中针对具体的某个方法是设计成抽象的还是具体的?
所有员工都有一个共同的行为:上班打卡 ,打卡的方法应该定义父类Employee中,问题:打卡是设计为抽象方法还是具体的方法?
- 三种员工:打卡的时间各不相同 8 :00 9:00 10:10
- 五种员工:4种都是9点 只有1种员工12点打卡
父类中普通的方法作为子类来说有选择性的去重写,父类中抽象方法要求所有的子类必须强制重写
本文探讨类间依赖关系的强弱区分,以出租车司机与车的强依赖和学生与车的弱依赖为例。介绍了如何通过抽象方法和依赖倒置原则降低耦合,以及如何根据实际场景决定抽象方法的使用。同时,阐述了抽象类和抽象方法在软件设计中的作用。

被折叠的 条评论
为什么被折叠?



