java学习笔记(十四)多态、对象转型

目录

1.多态

1.类的多态

2.接口的多态

2.对象转型

1.向上转型:

2.向下转型

1.多态

1.类的多态

我们来简单实现一个需求,老师骑着自行车上班,这时候我们就需要建一个人物类,自行车类,然后分别在实体类里面写上方法,一般我们的思想就是这样,但是假如我需求升级,现在老师是做小轿车去上班,好,这时候我们需变动我们创建的自行车类,然后再写方法和属性,但是就需要修改原来的代码,我们在写代码的时候其实默认都遵守一个规则,叫ocp原则(开闭原则),O- open,在需求升级的时候,对于创建类是欢迎的,C-close,在需求升级时,对于修改原有类时拒绝的,针对这个原则,我们是可以使用多态来写。

我们把小车和自行车相同的元素提取出来,创建为一个交通工具抽象类,然后我的小车类和自行车类来继承我的父类,然后在我的子类中重写我需要的方法,就可以达到我无论变成什么交通工具,都不用修改原来的代码。

主方法:

public class Test01 {

	public static void main(String[] args) {
		
		Teacher t = new Teacher();
		
		//多态:子类对象执行父类引用
		//父类引用中存的是子类对象在堆中开辟的地址
		Vehicle v = new Car();
		
		t.start(v);
		System.out.println("欣赏沿途的风景...");
		t.stop(v);
		
	}
}

老师类:

public class Teacher {

	public void start(Vehicle v){
		v.open();
	}
	
	public void stop(Vehicle v){
		v.close();
	}
}

交通工具类:

public abstract class Vehicle {

	public abstract void open();
	
	public abstract void close();
}

自行车类: 

public class Bike extends Vehicle{

	@Override
	public void open(){
		System.out.println("握好把手,脚蹬脚踏板");
	}
	
	@Override
	public void close(){
		System.out.println("手捏刹车");
	}
}

小车类:

public class Car extends Vehicle{

	@Override
	public void open(){
		System.out.println("系好安全带,一键启动,挂挡,踩油门");
	}
	
	@Override
	public void close(){
		System.out.println("踩刹车,挂挡,熄火,松安全带");
	}
}

2.接口的多态

需求,模拟电脑连接外部设备

首先我们思考一下,这些外部设备有什么相同点,对,就是都需要插在电脑上才能用,所以我们创建一个usb接口类

public interface IUSB {
	
	public void use();

}

键盘类去实现usb接口类

public class Keyboard implements IUSB {

	@Override
	public void use() {
		System.out.println("键盘:输入数据");
	}

}

鼠标类实现usb接口类

public class Mouse implements IUSB{

	@Override
	public void use() {
		System.out.println("鼠标:左点点、右点点");
	}

}

主方法:

public class Test01 {

	public static void main(String[] args) {
		
		Computer computer = new Computer();
		
		//接口的多态:实现类对象指向接口的引用
		//接口的引用存储的是实现类对象在堆中开辟的地址
		IUSB usb = new Keyboard();
		
		computer.connection(usb);
	}
}

2.对象转型

1.向上转型:

子类类型 转 父类类型
         * 可以调用父类的非私有化成员变量
         * 可以调用父类的非私有化的成员方法
         * 可以调用子类重写父类的成员方法

向上转型其实就是多态
         * 多态的优点:符合OCP原则的开发,需求更改时,项目的可维护性高
         * 多态的缺点:不能调用子类独有的成员变量和成员方法

2.向下转型

父类类型转子类类型

注意:

* 首先我们要先向上转型之后,才能向下转型

* 向下转型是不安全的

比如 

import java.util.Scanner;

public class Test01 {

	public static void main(String[] args) {
		
		//错误示范
		//ClassCastException - 类型转换异常
		Scanner scan = (Scanner) new Object();
	}
}

这个时候就会报类型转换异常,就是不安全的,所以我们在用的时候一定要用instanceof来判断,否则就可能会报错。

比如我们建一个动物类:

//动物类
public class Animal {

}

然后写一个小猫类继承动物类:

public class Cat extends Animal{

	public void shout(){
		System.out.println("小猫:喵喵喵~~~");
	}
}

写个小狗继承动物类:

public class Dog extends Animal{

	public void eat(){
		System.out.println("小狗吃骨头~~");
	}
}

主方法:

public class Test02 {

	public static void main(String[] args) {
		
		//向上转型
		Animal an = new Cat();
		
		//向下转型
		if(an instanceof Dog){//判断引用an中存储的对象是否是Dog类
			Dog dog = (Dog) an;
			dog.eat();
		}else if(an instanceof Cat){//判断引用an中存储的对象是否是Cat类
			Cat cat = (Cat) an;
			cat.shout();
		}
		
	}
}

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyyiwy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值