java语法基础8——面向对象(多态)

多态

接口

  1. 定义: 接口是一种约定规范,是多个抽象方法的集合.仅仅只是定义了应该有哪些功能,本身不实现功能,至于每个功能具体怎么实现,就交给实现类完成.
  2. 接口中的方法全部是抽象方法,接口实现类必须重写所有的抽象方法,否则只能定义成抽象类
  3. 接口中的方法是抽象方法,不提供功能实现,体现了规范和实现相分离的思想,也体现了组件之间低耦合的思想.

接口与接口之间的继承

// 定义接口,接口名习惯以大写的I开头,如接口IUsb,ISpeak,ISee
public interface 接口名 {
	抽象方法;
}

// 接口之间可以存在多继承的方法,假设已有接口ISpeak,ISee
public interface extends ISpeak, ISee {	// 接口之间可以多继承
	抽象方法;	// 同时继承了ISpeak,ISee中的抽象方法
}

接口与实现类

// 接口与实现类
public interface ISpeak {	// 定义接口
	void speak();	// 抽象方法,只定义,不实现
}

// 实现类
public class Person implements ISpeak {	// 接口实现类
	public void speak() {	// 重写ISpeak接口中的speak()方法
		System.out.println("我会说英语!");
	}
}

注:

  1. 接口实现类可以同时继承抽象类和实现接口,写法顺序是先写继承,再写接口,如:
    Public class Person extends Animal implements ISpeak {}
  2. 实现类必须重写接口中的所有抽象方法,否则只能定义成抽象类
  3. 接口中必须全为抽象方法(可以定义常量)

多态

  1. 定义: 同一个对象拥有多种形态,也就是说一个抽象方法有很多重写的方法,产生不同的执行效果
  2. 抽象类和接口都可以体现多态,它们中的抽象方法可以被重写出很多不同的功能
  3. 多态情况下的访问流程: 编译时期先去父类找是否存在该方法,如果没有则报错;运行时期在父类中找到了该方法再去子类中寻找,如果找不到则访问父类中的方法,如果找到了就执行子类中的方法
类型转换
// 多态的类型转换,以抽象类为例
// 抽象动物类,抽象方法是走路功能
public abstract class Animal {
	public abstract void walk();
}

// 抽象人类,继承抽象动物类,多了写字的抽象方法
public abstract class Person extends Animal {
	public abstract void write();
}

// 抽象外国人,继承人类,多了说外语的抽象方法
public abstract class Foreigner extends Person {
	public abstract void speak();
}

// 人们类(抽象类的子类),重写抽象类的抽象方法
public class People extends Foreigner {
	public void Walk() {
		System.out.println("我会走路!");
	}
	
	public void write() {
		System.out.println("我会写字!");
	}

	public void speak() {
		System.out.println("我会说英语!");
	}
}

// 测试类Demo
public class Demo {
	public static void main(String[] args) {
		Animal animal= new People();
		//用抽象父类Animal作为对象的接收类型只能访问到Animal类中的walk()方法,无法访问到write方法
		animal.walk();	
		// animal.write();	报错
		
		// 这个时候想要访问write方法可以使用类型强制转换
		Person person = (Person) animal;
		person.write();	// 强制转换以后就可以访问了
		
	}
}

多态的好处
  1. 程序不用为每个子类(接口实现类)编写功能调用,只需要对抽象父类(接口)进行处理即可,大大提高了程序的可复用性
  2. 子类的功能可以被父类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性.(多态真正的作用)

多态的USB案例

  1. 需求: 模拟在主板上安装鼠标、键盘等.
  2. 实现:
// 鼠标,键盘都有工作的功能,规范方法,使用接口
public interface IUsb {
	void work();
}

// 鼠标实现功能
public class Mouse implements {
	public void work() {	//	重写抽象方法
		System.out.println("鼠标在移动");
	}
}

// 键盘实现功能
public class Keyboard implements {
	public void work() {
		System.out.println("键盘在打字");
	}
}

// 主板上安装键盘和鼠标
public class Motherboard {
	// IUsb类型可以接受实现类对象
	public void plugin(IUsb usb) {
		usb.work();
	}
}

// 测试类
public class TestDemo {
	public static void main(String[] args) {
		// 创建主板对象
		Motherboard b = new Motherboard();
		// 创建鼠标对象
		Mouse m = new Mouse();
		// 创建键盘对象
		keyboard k = new Keyboard();
		// 在键盘上安装鼠标
		b.plugin(m);
		// 在键盘上安装键盘
		b.plugin(k);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值