面向对象(多态)-第一阶段-第九天-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{
	@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点打卡

父类中普通的方法作为子类来说有选择性的去重写,父类中抽象方法要求所有的子类必须强制重写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值