java入门-----多态
1.多态
类的多态:
子类对象指向父类引用
父类引用中存储的是子类对象在堆中的地址
需求:老师骑着自行车上班
分析:老师类、自行车类
public class Bick{
public void start(){
System.out.println("自行车:弹射起步!!!")
}
public void stop(){
System.out.println("自行车:刹车!!!")
}
}
public class Teacher{
public void open(Bick b){
b.start();
}
public void close(Bick b){
b.stop();
}
}
public class Test{
public static void main(String[] args){
Teacher t = new Teacher();
Bick b = new Bick();
t.start(b);
t.stop(b);
}
}
自行车:弹射起步!!
自行车:刹车!!!
需求升级/迭代:自行车->小汽车
步骤:
1.创建Car类,编写start、stop
public class Car{
public void start(){
System.out.println("汽车:弹射起步!!!")
}
public void stop(){
System.out.println("汽车:刹车!!!")
}
}
2.在原有Teacher类的基础上编写open、close
public class Teacher{
public void open(Car c){
c.start();
}
public void close(Car c){
c.stop();
}
}
public class Test{
public static void main(String[] args){
Teacher t = new Teacher();
Car c = new Car();
t.start(c);
t.stop(c);
}
}
注意:违反了OCP原则
OCP - 开闭原则:
O - open :在需求升级时,对于创建类是欢迎的
C - close:在需求升级时,改变原有代码是拒绝的
注意:需求升级时,尽量不要改变以前的类,否则容易出bug
需求升级/迭代:自行车->小汽车->飞机
步骤:创建Plane类继承Vehicle
public abstract class Vehicle{
public abstract void start();
public abstract void stop();
}
public class Plane extends Vehicle{
@Override
public void start() {
System.out.println("飞机:一键启动,加油门,拉机翼~~~");
}
@Override
public void stop() {
System.out.println("飞机:跳伞~~~");
}
}
public class Teacher {
public void open(Vehicle v){
v.start();
}
public void close(Vehicle v){
v.stop();
}
}
public class Test{
public static void main(String[] args){
Teacher t = new Teacher();
//类的多态:子类对象指向父类引用
//父类引用中存储的是子类对象在堆中的地址
Vehicle v = new Plane();
t.start(v);
t.stop(v);
}
}
飞机:一键启动,加油门,拉机翼~~~
飞机:跳伞~~~
接口的多态
接口的多态:实现类的对象指向接口的引用
接口的引用中存放的是实现类对象在堆中开辟空间的地址
需求:鼠标、硬盘连接电脑
1.定义一个USB接口
public interface IUSB {
public void use();
}
2.鼠标实现接口的方法(不同类的实现方法不同,所以要根据情况重写)
public class Mouse implements IUSB{
@Override
public void use() {
System.out.println("鼠标:左点点,右点点");
}
}
3.硬盘实现接口的方法
public class Disk implements IUSB{
@Override
public void use() {
System.out.println("硬盘:上传文件、下载文件");
}
}
4.电脑类
public class Computer {
//连接usb的方法
public void connection(IUSB usb){
usb.use();
}
}
5.测试方法
package com.dream.test02;
public class Test01 {
public static void main(String[] args) {
Computer computer = new Computer();
//接口的多态:实现类的对象指向接口的引用
//接口的引用中存放的是实现类对象在堆中开辟空间的地址
IUSB usb = new Mouse();
IUSB usb = new Disk();
computer.connection(usb);
computer.connection(usb);
}
}
鼠标:左点点,右点点
硬盘:上传文件、下载文件
创作不易,每天更新优质内容,各位路过给个关注。。。