4.57 接口练习

1:

/*
猫狗案例,加入跳高的额外功能

分析:从具体到抽象
	猫:
		姓名,年龄
		吃饭,睡觉
	狗:
		姓名,年龄
		吃饭,睡觉

	由于有共性功能,所以,抽取出一个父类:
	动物:
		姓名,年龄
		吃饭();
		睡觉(){}

	猫:继承自动物
	狗:继承自动物

	跳高的额外功能是一个新的扩展功能,所以要定义一个接口
	接口:
		跳高

	部分猫:实现跳高
	部分狗:实现跳高
实现;
	从抽象到具体

使用:
	使用具体类
*/
//定义跳高接口
interface Jumpping {
	// 跳高功能
	public abstract void jump();
}

// 定义抽象类
abstract class Animal {
	// 姓名
	private String name;
	// 年龄
	private int age;

	public Animal() {
	}

	public Animal(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	// 吃饭();
	public abstract void eat();

	// 睡觉(){}
	public void sleep() {
		System.out.println("睡觉了");
	}
}

// 具体猫类
class Cat extends Animal {
	public Cat() {
	}

	public Cat(String name, int age) {
		super(name, age);
	}

	public void eat() {
		System.out.println("猫吃鱼");
	}
}

// 具体狗类
class Dog extends Animal {
	public Dog() {
	}

	public Dog(String name, int age) {
		super(name, age);
	}

	public void eat() {
		System.out.println("狗吃肉");
	}
}

// 有跳高功能的猫
class JumpCat extends Cat implements Jumpping {
	public JumpCat() {
	}

	public JumpCat(String name, int age) {
		super(name, age);
	}

	public void jump() {
		System.out.println("跳高猫");
	}
}

// 有跳高功能的狗
class JumpDog extends Dog implements Jumpping {
	public JumpDog() {
	}

	public JumpDog(String name, int age) {
		super(name, age);
	}

	public void jump() {
		System.out.println("跳高狗");
	}
}

class InterfaceTest {
	public static void main(String[] args) {
		// 定义跳高猫并测试
		JumpCat jc = new JumpCat();
		jc.setName("哆啦A梦");
		jc.setAge(3);
		System.out.println(jc.getName() + "---" + jc.getAge());
		jc.eat();
		jc.sleep();
		jc.jump();
		System.out.println("-----------------");

		JumpCat jc2 = new JumpCat("加菲猫", 2);
		System.out.println(jc2.getName() + "---" + jc2.getAge());
		jc2.eat();
		jc2.sleep();
		jc2.jump();

		// 定义跳高狗并进行测试的事情自己完成。
	}
}

2:

/*
老师和学生案例,加入抽烟的额外功能

分析:从具体到抽象
	老师:姓名,年龄,吃饭,睡觉
	学生:姓名,年龄,吃饭,睡觉

	由于有共性功能,提取出一个父类,人类。

	人类:
		姓名,年龄
		吃饭();
		睡觉(){}

	抽烟的额外功能不是人或者老师,或者学生一开始就应该具备的,所以,把它定义为接口

	抽烟接口。

	部分老师抽烟:实现抽烟接口
	部分学生抽烟:实现抽烟接口

实现:从抽象到具体

使用:具体
*/
//定义抽烟接口
interface Smoking {
	// 抽烟的抽象方法
	public abstract void smoke();
}

// 定义抽象人类
abstract class Person {
	// 姓名
	private String name;
	// 年龄
	private int age;

	public Person() {
	}

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	// 吃饭();
	public abstract void eat();

	// 睡觉(){}
	public void sleep() {
		System.out.println("睡觉觉了");
	}
}

// 具体老师类
class Teacher extends Person {
	public Teacher() {
	}

	public Teacher(String name, int age) {
		super(name, age);
	}

	public void eat() {
		System.out.println("吃大白菜");
	}
}

// 具体学生类
class Student extends Person {
	public Student() {
	}

	public Student(String name, int age) {
		super(name, age);
	}

	public void eat() {
		System.out.println("吃红烧肉");
	}
}

// 抽烟的老师
class SmokingTeacher extends Teacher implements Smoking {
	public SmokingTeacher() {
	}

	public SmokingTeacher(String name, int age) {
		super(name, age);
	}

	public void smoke() {
		System.out.println("抽烟的老师");
	}
}

// 抽烟的学生
class SmokingStudent extends Student implements Smoking {
	public SmokingStudent() {
	}

	public SmokingStudent(String name, int age) {
		super(name, age);
	}

	public void smoke() {
		System.out.println("抽烟的学生");
	}
}

class InterfaceTest2 {
	public static void main(String[] args) {
		// 测试学生
		SmokingStudent ss = new SmokingStudent();
		ss.setName("abc");
		ss.setAge(27);
		System.out.println(ss.getName() + "---" + ss.getAge());
		ss.eat();
		ss.sleep();
		ss.smoke();
		System.out.println("-------------------");

		SmokingStudent ss2 = new SmokingStudent("efg", 30);
		System.out.println(ss2.getName() + "---" + ss2.getAge());
		ss2.eat();
		ss2.sleep();
		ss2.smoke();

		// 测试老师
	}
}
时间: 2024-10-06 10:51:37

4.57 接口练习的相关文章

Java面向对象程序设计--接口和内部类

1.接口的定义: In the Java programming language, an interface is not a class but a set of requirements for classes that want to conform the interface. 说明: 1) Interface 不是class,虽然interface具有class的一些特点,例如能够继承,能够定义相同类型的变量,而且和C++的abstract class非常像,但Java 的inter

获取当前网络中的电脑数目及MAC-通过MAC查找IP-通过IP查询机器名

1 Microsoft Windows [版本 6.1.7601] 2 版权所有 (c) 2009 Microsoft Corporation.保留所有权利. 3 4 C:\Users\Administrator>netsh 5 netsh>wlan 6 netsh wlan>show hostednetwork 7 8 承载网络设置 9 ----------------------- 10 模式 : 已启用 11 SSID 名称 :“BCOJBConnect_PCWifi” 12 最多

双十一活动开发技术总结

问题一:返现卷读接口展示品牌与接口的二级联动效果,并能跳转到相应的商城页 下面是读取商城接口返回的json数据格式,以及相关字段说明 [{ "id": 274, //跳转到商城的优惠Id "serialGroupgName": "奥迪Q3", //车系名称 "title": "多项优惠类型小活动", "manufacturerId": 1, //品牌Id "serialGrou

获得Unix/Linux系统中的IP、MAC地址等信息

获得Unix/Linux系统中的IP.MAC地址等信息 中高级  |  2010-07-13 16:03  |  分类:①C语言. Unix/Linux. 网络编程 ②手册  |  4,471 次阅读 作者:diaoyf  |  文章来源:http://programmerdigest.cn 实际环境和特殊需求往往会将简单问题复杂化,比如计算机IP地址,对于一个连接中socket,可以直接获得本端和对端的IP.端口信息.但在一些特殊场合我们可能需要更多的信息,比如系统中有几块网卡,他们的Mac地

php面试全套

7.mvc是什么?相互间有什么关系? 答:mvc是一种开发模式,主要分为三部分:m(model),也就是模型,负责数据的操作;v(view),也就是视图,负责前后台的显示;c(controller),也就是控制器,负责业务逻辑 客户端请求项目的控制器,如果执行过程中需要用到数据,控制器就会到模型中获取数据,再将获取到的数据通过视图显示出来 8.oop是什么? 答:oop是面向对象编程,面向对象编程是一种计算机编程架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而

爬取笔趣阁小说

<修罗武神>是在17K小说网上连载的网络小说,作者为善良的蜜蜂.小说讲述了一个少年从下界二等门派外门弟子成长为上界翘楚人物的故事.该书曾入选“第三届橙瓜网络文学奖”百强作品. 编程只是实现目的的工具. 所以重点是分析我们的需求. 获取小说目录页面是基本.这里有各个章节的链接,标题等等内容.这是我们需要的. 有了各个章节的链接,就需要进入其中获得各个章节的内容. 1.首先是爬取网站的内容 1 def get_content(url): 2 3 try: 4 headers = { 5 'User

[Effective JavaScript 笔记]第57条:使用结构类型设计灵活的接口

想象创建wiki的库.wiki网站包含用户可以交互式地创建.删除和修改的内容.许多wiki都以简单.基于文本标记语言创建内容为特色.通常,这些标记语言只提供了HTML可用功能的一个子集,但是却有一个更简单.更清晰的源格式.例如,环绕星号的文本被格式化为粗体,环绕下划线的被格式化为带有下划线的文本,环绕斜杠的被格式化为斜体.用记可以输入如下格式: this sentence contains a *bold phrase* within it. this sentence contains a _

ModelDriven和prepareable接口解决update时,只会保存提交的数据,而将其余为重新设值的数据update为空的问题

1 public class EmployeeAction0 extends BaseAction implements 2 ModelDriven<Employee>, Preparable { 3 private IEmployeeService employeeService; 4 private PageResult<Employee> pageResult; 5 private Employee employee; 6 // 必须进行实例化 7 private Emplo

微信公众平台自定义菜单及高级接口PHP SDK

本文介绍介绍微信公众平台自定义菜单及高级接口的PHP SDK及使用方法. 作者 方倍工作室 修正记录: 2014.05.03 v1.0 方倍工作室 http://www.cnblogs.com/txw1958/ SDK 源码: 1 /* 2 方倍工作室 http://www.cnblogs.com/txw1958/ 3 CopyRight 2014 www.doucube.com All Rights Reserved 4 */ 5 6 class class_weixin_adv 7 { 8