本文主要是介绍面向对象(多态)-第一阶段-第九天-2021-07-23,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
多态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{@Overridepublic 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点打卡
父类中普通的方法作为子类来说有选择性的去重写,父类中抽象方法要求所有的子类必须强制重写
这篇关于面向对象(多态)-第一阶段-第九天-2021-07-23的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!