JAVA面向对象之多态、接口

目录

一、多态

(一)多态的形象理解

(1)生活中的多态

(2)多态在其他语言中的表现

(二)JAVA中的多态

 (1)主角

(2)含义

(3)多态的前提条件(必须全部满足)

(4)多态的验证:

(5)多态的常见写法

(6)多态的优势

(7)多态的劣势

二、接口

(一)接口关键字

(二)接口与类对比

(三)接口作用

(四)实现关系

(1)接口为了继承体系中的实现关系做铺垫

(2)含义

(3)关键字

(4)特点

(五)案例


一、多态

(一)多态的形象理解

(1)生活中的多态

1、H2O根据不同的温度产生不同的形态

条件形态该形态的名称
常温常压液态
标压100℃以上气态水蒸气
标压0摄氏度以下固态

2、龙生九子,各有不同

(2)多态在其他语言中的表现

1、HTML

 <input> 根据不同的type属性值,展示不同的形态

- type=”text”  文本框

- type=”password”  密码框

- type=”button”  按钮

(二)JAVA中的多态

 (1)主角

        父类(与继承不同,继承的重心和主角都是子类)

(2)含义

        一个父类 根据 创建不同的子类,调用同一个方法,产生不同的结果

(3)多态的前提条件(必须全部满足)

        1、必须出现在继承体系中

        2、必须具备方法的重写

        3、必须满足一种写法“向上转型”

        向上转型 引用是 父类 ,对象是 子类(父类引用指向子类对象)

        例子:

写法1: Role role = new Hero();

写法2:Hero hero = new Hero();

             Role role = hero ;

写法3:Hero hero = new Hero();

            Enemy en =new Enemy();

            WildMonster Wild = new WildMonster();

            Role[] arr = {hero,en,wild};

(4)多态的验证:

   在满足以上三个条件的基础上,所有的创建出来的子类对象调用同一个方法,产生不同的结果。 

(5)多态的常见写法

        1、当数组的类型是父类类型时,所有的子类对象都能存进数组中。

        2、当方法的形式参数是父类的类型时,所有的子类对象都能传进来

        3、当方法的返回值类型是父类类型时,所有的子类对象都能返回出来

(6)多态的优势

        让程序更加的灵活,提高代码的扩展性

(7)多态的劣势

        在多态的环境中,对象名无法直接访问子类特有的方法(只能访问重写的父类方法)

        解决方法:向下转型

        例子:

Hero 类有 backhome 方法而Role类没有,那么:

((Hero)role).backhome();

二、接口

引用数据类型 :数组、对象

对象:类、接口

(一)接口关键字

        interface       

(二)接口与类对比

接口
成员属性

默认都是常量 public static final (修饰符可以省略)

 常量命名规范:全部字母大写 多个单词使用下划线分割

构造方法不允许写(意味着无法实例化)
成员方法

默认都是抽象方法(jdk 1.8之后,若要使用普通方法,需在方法声明前加上 default 关键字)

(三)接口作用

        1、设计

        2、规定/协议

(四)实现关系

(1)接口为了继承体系中的实现关系做铺垫

(2)含义

        类与接口之间的关系(师徒关系)

(3)关键字

        implement

 class A implements 接口B,接口C,接口D

(4)特点

        类A必须重写接口中所有的抽象方法,除非A是个抽象类

(五)案例

模拟计算机中USB接口加载和运行

 - USB 接口

 - 电脑类

 - 鼠标类

 - 键盘类

 - 测试类

package demo02;

public interface USB {
	
	
	//USB驱动程序的方法
	void driver();
	
}
package demo02;

public class Mouse implements USB{
	@Override
	public void driver() {
		// TODO Auto-generated method stub
		System.out.println("鼠标的驱动加载完毕!鼠标可以运作!");
	}
}
package demo02;

public class KeyBoard implements USB{
	public KeyBoard() {
		// TODO Auto-generated constructor stub
		
	}
	@Override
	public void driver() {
		// TODO Auto-generated method stub
		System.out.println("键盘的驱动加载完毕!键盘可以运作!");
	}
}
package demo02;

public class Computer {
	private USB[] usbArr ;
	
	
	public Computer() {
		// TODO Auto-generated constructor stub''
		usbArr = new USB[3];
	}


	public USB[] getUsbArr() {
		return usbArr;
	}


	public void setUsbArr(USB[] usbArr) {
		this.usbArr = usbArr;
	}
	
	
	//电脑加载所有USB程序的方法
	public void loadUSB() {
		for (int i = 0; i < usbArr.length; i++) {
			if(usbArr[i]!=null) {usbArr[i].driver();}
		}
	}
	
	
}

package demo02;

public class Test01 {
	public static void main(String[] args) {
		Computer pc = new Computer();
		Mouse m = new Mouse();
		KeyBoard k =new KeyBoard();
		
		
		//插入USB
		pc.getUsbArr()[0] = m;
		pc.getUsbArr()[1] = k;
		
		
		pc.loadUSB();
		
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值