Interfaz Java, polimorfismo

Interfaz, polimorfismo

1. Interfaz

1.1 Interfaces en la vida
生活中接口
	USB Type-C RJ45 雷电协议口(USB-C) 3.5MM HDMI 国标插座 VGA DP 

这些接口有什么作用???
	USB接口为例
		充电,U盘,移动硬盘,麦克风,网卡,声卡,键盘,鼠标
	
	给予当前电脑其他的拓展功能
	当前连接的所有设备,都需要符合USB接口协议
		固定内容:
			尺寸,接触引脚个数
		不固定
			通过USB接口完成的拓宽内容。
			USB接口制定连接操作过程,同时要求USB设备完成对应规范。【驱动安装】

【插件式编程方式】
1.2 Formato de interfaz
关键字:
	interface 接口 UI User Interface 
	implements 【遵从】

格式:
	定义接口格式
    	interface A {
    		成员变量
    		成员方法
    	}
    	
    遵从接口:
    	class B implements A {
    	
    	}
interface A {
    
    
	/* 
	 * 成员变量
	 * The blank final field num may not have been initialized
	 * final修饰的成员变量num可能尚未初始化
	 * 
	 * 在Eclipse --> Outline 发现当前变量有 SF 修饰 S ==> static F ==> final
	 * 并没有【显式】使用public static final修饰。
	 * 接口语法中有规定,成员变量【缺省属性】 public static final
	 */
	int num = 10;
	
	/*
	 * 成员方法
	 * Abstract methods do not specify a body
	 * abstract修饰的方法不配有方法体
	 * 
	 * 接口语法规定,成员方法【缺省属性】public abstract
	 */
	void test();
}
/*
 * 定义一个类【遵从 implements】接口
 * The type TypeA must implement the inherited abstract method A.test()
 * TypeA类必须实现通过[继承关系]得到的abstract修饰方法 A接口中的test
 */
class TypeA implements A {
    
    
	@Override
	public void test() {
    
    
		System.out.println("TypeA类遵从接口A实现test方法");
	}
}
    
public class Demo1 {
    
    
	public static void main(String[] args) {
    
    
		TypeA typeA = new TypeA();
		
		typeA.test();
		
		// 匿名对象
		new TypeA().test();
	}
	
}
1.3 Uso especial de la interfaz
1.3.1 Cumplimiento de múltiples interfaces
package com.qfedu.a_interface;

interface B {
    
    
	void testB();
}

interface C {
    
    
	void testC();
}

/*
 * TypeB类遵从多个接口,多个接口使用 逗号 , 隔开用户是
 */
class TypeB implements B, C {
    
    

	@Override
	public void testC() {
    
    
		System.out.println("遵从接口C完成的testC方法");
	}

	@Override
	public void testB() {
    
    
		System.out.println("遵从接口B完成的testB方法");
	}
	
}

public class Demo2 {
    
    
	public static void main(String[] args) {
    
    
		// 匿名对象直接调用方法,有new就有堆区内存,同时有new就会有对应的新对象
		new TypeB().testB();
		new TypeB().testC();
	}
}
1.3.2 Herencia + Cumplimiento
package com.qfedu.a_interface;

interface D {
    
    
	void testD();
}

class Father {
    
    
	public void game() {
    
    
		System.out.println("黄金矿工!!!");
	}
}

/*
 * Son类是Father类的一个子类,同时也是D接口的实现类
 * 
 * Java是一门单继承语言,允许多接口遵从
 */
class Son extends Father implements D {
    
    

	@Override
	public void testD() {
    
    
		System.out.println("遵从接口D实现的testD方法");
	}
	
}

public class Demo3 {
    
    
	public static void main(String[] args) {
    
    
		// 子类可以使用父类中的继承而来的方法
		new Son().game();
		
		// Son类是接口D的实现类对象,可以使用testD方法
		new Son().testD();
	}
}

1.3.3 palabra clave predeterminada
package com.qfedu.a_interface;

/*
 * default关键字是 JDK 1.8 新特征
 * 
 * default在接口中修饰方法,为默认方法,非必要强制实现方法。
 * default关键字修饰的方法,允许有方法体
 */
interface E {
    
    
	
	void test();
	
	default public void testDefault() {
    
    
		System.out.println("默认方法");
	}
}

class TypeC implements E {
    
    
	/*
	 * TypeC类强制要求完成【缺省属性】为public abstract的test方法
	 * 
	 * 不强制重写 testDefault方法
	 */
	@Override
	public void test() {
    
    
		System.out.println("遵从接口E实现的test方法");
	}
	
}

public class Demo4 {
    
    
	public static void main(String[] args) {
    
    
		new TypeC().test();
		new TypeC().testDefault();
	}
}

2. Análisis de problemas prácticos de la vida [código de caso tres veces]

2.1 Animales y varios animales
动物可以看做是一个类
老虎,狮子,熊猫可以各自看做是一个类
老虎,狮子,熊猫 ==> 是不是动物??? 是
package com.qfedu.b;

/*
 * 动物类
 */
class Animal {
    
    }

/*
 * 老虎类,同时也是动物类子类
 */
class Tiger extends Animal {
    
    }

/*
 * 狮子类,同样是动物类的子类
 */
class Lion extends Animal {
    
    }

/*
 * 熊猫类,也是动物类的子类
 */
class Panda extends Animal {
    
    }


public class Demo1 {
    
    
	public static void main(String[] args) {
    
    
		Animal animal = new Animal();
		Tiger tiger = new Tiger();
		Lion lion = new Lion();
		Panda panda = new Panda();
		/*
		 * feedAnimal方法需要的参数是Animal类对象
		 * 这里可以传入Animal类对象,以及Animal类对象的子类对象。
		 */
		feedAnimal(animal);
		feedAnimal(panda);
		feedAnimal(lion);
		feedAnimal(tiger);
		
		/*
		 * 目前情况下是使用一个Animal引用数据类型变量指向一个Panda对象
		 */
		Animal animal2 = getAnimal();
		
		/*
		 * 引用数据类型的强制类型转换。大数据类型转小数据类型
		 * Animal是大数据类型,赋值给小数据类型Panda引用数据类型变量操作
		 * 需要使用强制类型转换。
		 */
		Panda panda2 = (Panda) animal2;
	}
	
	/**
	 * 喂食动物的方法,需要的参数是一个Animal类对象
	 * 
	 * @param animal Animal类对象
	 */
	public static void feedAnimal(Animal animal) {
    
    
		// animal.getClass().getName()  获取类名
		System.out.println(animal.getClass().getName() + "来吃饭了~~~");
	}
	
	/**
	 * 获取一个Animal类对象
	 * 
	 * @return Animal类对象
	 */
	public static Animal getAnimal() {
    
    
		/*
		 * 要求当前方法返回值数据类型是Animal类型,这里返回Animal类对象或者
		 * Animal的子类对象都是符合要求的。
		 */
		// return new Animal();
		return new Panda();
		// return new Tiger();
		// return new Lion();
	}
}

2.2. Interfaz USB y dispositivo USB
USB接口 ==> interface 
	规定当前USB设备需要完成的方法是什么。

USB设备 ==> 键盘 鼠标 遵从USB接口

电脑通过USB接口连接USB设备 ==> 方法
package com.qfedu.b;

interface USB {
    
    
	/**
	 * 要求所有的USB设备必须完成connect方法,连接方法
	 * 完成自己的功能
	 */
	void connect();
}

/**
 * 键盘类,同时也是USB设备,遵从USB接口
 * 
 * @author Anonymous
 */
class Keyboard implements USB {
    
    

	@Override
	public void connect() {
    
    
		System.out.println("键盘连接电脑...");
	}
}

/**
 * Filco类是Keyboard 键盘类子类,同时也是USB设备,间接遵从USB接口
 * @author Anonymous
 *
 */
class Filco extends Keyboard {
    
    
	@Override
	public void connect() {
    
    
		System.out.println("Filco 茶轴");
	}
}

/**
 * 鼠标类,同时也是USB设备,遵从USB接口
 * 
 * @author 期年之前ying@
 */
class Mouse implements USB {
    
    

	@Override
	public void connect() {
    
    
		System.out.println("鼠标连接电脑...");
	}
}

/**
 * LogiG502 是 Mouse 鼠标类的子类,也是一个USB设备,间接遵从USB接口
 * 
 * @author Anonymous
 *
 */
class LogiG502 extends Mouse {
    
    
	@Override
	public void connect() {
    
    
		System.out.println("Logi G502 游戏鼠标,非常nice");
	}
}

class Computer {
    
    
	/**
	 * 电脑类使用usb接口的方法,需要的参数是USB接口
	 * 
	 * @param usb
	 */
	public void useUsbInterface(USB usb) {
    
    
		// 使用接口的connect方法。
		usb.connect();
	}
}

public class Demo2 {
    
    
	public static void main(String[] args) {
    
    
		// 创建鼠标类对象和键盘类对象
		Mouse mouse = new Mouse();
		Keyboard keyboard = new Keyboard();
		
		// 创建一个电脑类对象
		Computer computer = new Computer();
		
		// 通过USB接口连接USB设备 ==> 鼠标
		computer.useUsbInterface(mouse);
		// 通过USB接口连接USB设备 ==> 键盘
		computer.useUsbInterface(keyboard);
		
		// Filco类匿名类对象,作为方法参数
		computer.useUsbInterface(new Filco());
		computer.useUsbInterface(new LogiG502());
	}
}
2.3 Recuerda dos oraciones con polimorfismo
父类的引用指向子类的对象
接口的引用指向遵从接口的类对象
	这就是多态
	
多态的作用:
	1. 拓宽方法的参数范围
		例如:
			方法参数是Animal类,这里可以传入Animal类对象,Tiger类对象,Lion类对象...
			方法参数是USB接口,可以传入Mouse类对象,Keyboard类对象。
	2. 拓宽方法的返回值范围
		例如:
			方法返回值类型是Animal类型,这里可以返回的数据Tiger类对象,Panda类对象...

慢慢揣摩【编译看左,运行看右】

3. Cooperación de varios tipos

3.1 Ensamblar la computadora
键盘是一个类
	属性:
		品牌 按键个数
	成员方法就是Setter和Getter方法

屏幕是一个类
	属性:
		品牌,尺寸
	成员方法就是Setter和Getter方法

电脑是一个类
	成员变量:
		键盘和屏幕是电脑的成员变量。
		【包含关系】
	成员方法:
		换键盘 setter 方法
		换屏幕 setter 方法
		展示电脑的配置
数范围
		例如:
			方法参数是Animal类,这里可以传入Animal类对象,Tiger类对象,Lion类对象...
			方法参数是USB接口,可以传入Mouse类对象,Keyboard类对象。
	2. 拓宽方法的返回值范围
		例如:
			方法返回值类型是Animal类型,这里可以返回的数据Tiger类对象,Panda类对象...

慢慢揣摩【编译看左,运行看右】

3. Cooperación de varios tipos

3.1 Ensamblar la computadora
键盘是一个类
	属性:
		品牌 按键个数
	成员方法就是Setter和Getter方法

屏幕是一个类
	属性:
		品牌,尺寸
	成员方法就是Setter和Getter方法

电脑是一个类
	成员变量:
		键盘和屏幕是电脑的成员变量。
		【包含关系】
	成员方法:
		换键盘 setter 方法
		换屏幕 setter 方法
		展示电脑的配置
``

Supongo que te gusta

Origin blog.csdn.net/lsq736158497/article/details/114148196
Recomendado
Clasificación