第1关:用接口展示不同品牌的产品
用接口展示不同品牌的产品
代码
//展示不同品牌的产品
import java.util.Scanner;
interface ShowMessage {
void showLogo();
}
class TV implements ShowMessage {
private String pinpai;
public TV(String pinpai) {
this.pinpai = pinpai;
}
@Override
public void showLogo() {
System.out.println(pinpai + "品牌电视机");
}
}
//设计PC类,实现接口ShowMessage,类中有private的String类型成员变量pinpai
//类中添加public的构造方法,初始化成员变量
//类中重写方法showLogo(),使得输出(xx为品牌名):xx品牌电脑
//*****begin*****
class PC implements ShowMessage {
private String pinpai;
public PC(String pinpai) {
this.pinpai = pinpai;
}
@Override
public void showLogo() {
System.out.println(pinpai + "品牌电脑");
}
}
//*****end*****
public class SY7_1 {
public static void print(ShowMessage sm) {
sm.showLogo();
}
public static void main(String[] args) {
//品牌名字符串由用户输入
String str = new Scanner(System.in).next();
ShowMessage sm;
//品牌名称通过构造方法注入,由接口展示不同的品牌
sm = new TV(str);
print(sm);
sm = new PC(str);
print(sm);
}
}
第2关:用接口展示不同国家的问候语
用接口展示不同国家的问候语
思考面向接口编程的好处
代码
//设计表达不同国家的问候语
//如果增加表达另外一个国家的问候语,如何做?请在idea环境练习
import java.util.Scanner;
interface SpeakHelloMode {
void speakHello();
}
class Chinese implements SpeakHelloMode {
@Override
public void speakHello() {
System.out.println("中国人习惯问候语:你好,吃了吗?");
}
}
class English implements SpeakHelloMode {
@Override
public void speakHello() {
System.out.println("英国人习惯问候语:你好,天气不错!");
}
}
class KindHello {
public void SayHello(SpeakHelloMode hello) {
hello.speakHello();
}
}
public class SY7_2 {
public static void main(String[] args) {
SpeakHelloMode smode = null;
String country = new Scanner(System.in).next();
//根据输入的输入的国家,输出不同的问候语
//如果输入:中国,则输出:中国人习惯问候语:你好,吃了吗?
//如果输入:英国,则输出:英国人习惯问候语:你好,天气不错!
//其他情况,则输出:您的国家是?然后退出程序运行。
//*****begin*****
KindHello kindHello = new KindHello();
if (country.equals("中国")) {
smode = new Chinese();
} else if (country.equals("英国")) {
smode = new English();
} else {
System.out.println("您的国家是?");
System.exit(0);
}
kindHello.SayHello(smode);
//*****end*****
}
}
第3关:广告牌展示不同公司的广告
利用接口实现:广告牌展示不同公司的广告
代码
//设计广告牌,希望所设计的广告牌可以展示许多公司的广告
import java.util.Scanner;
interface Advertisement{//广告展示接口
public void showAdvertisement();
}
class AdvertisementBoard{//广告牌类,可展示不同公司的广告
//声明一个接口Advertisement的变量(如ad)作为成员
//添加public成员方法setAd,无返回,参数为Advertisement接口变量,用来设置或初始化ad
//添加public成员方法show(),无返回,无参,根据以下规则展示广告Advertisement:
//如果ad为null,则换行输出:广告招商中
//其他情况下,则由ad调用其接口方法showAdvertisement(),展示广告
//*****begin*****
private Advertisement ad;
public void setAd(Advertisement ad) {
this.ad = ad;
}
public void show() {
if (ad == null) {
System.out.println("广告招商中");
} else {
ad.showAdvertisement();
}
}
//*****end*****
}
class ACorp implements Advertisement{
private String name;
public ACorp(String name) {
this.name = name;
}
@Override
public void showAdvertisement() {
System.out.println(name+"公司,永争第一!");
}
}
//增加一个公司:BCorp,实现接口Advertisement
//BCorp类中有一个private成员属性name
//BCorp类中有public构造方法,初始化name
//BCorp类中有public方法showAdvertisement(),用于换行输出(XX为公司name):XX公司,服务全球!
//*****begin*****
class BCorp implements Advertisement {
private String name;
public BCorp(String name) {
this.name = name;
}
@Override
public void showAdvertisement() {
System.out.println(name + "公司,服务全球!");
}
}
//*****end*****
public class SY7_3 {
public static void main(String[] args) {
AdvertisementBoard board=new AdvertisementBoard();
Advertisement ad=null;
String corp=new Scanner(System.in).next();
if(corp.equals("A")){
ad=new ACorp("corpA");
} else if (corp.equals("B")) {
ad=new BCorp("corpB");
}
board.setAd(ad);
board.show();
}
}
第4关:利用接口实现不同类别事物的不同行为
说明:利用接口实现不同事件的不同行为,体会接口与抽象类的区别
任务要求: 按照注释要求,完成类的设计 根据本案例接口的设计,可继续在idea环境中,进行程序的扩展,如面对接口Swimable,在主类中添加方法:flyInAir(Flyable fly),swimInWater(Swimable swim)等。
代码
Car.java
abstract class Car {
protected String carName;
public Car(String carName) {
this.carName = carName;
}
public abstract void useEnergy();
}
class ElectricCar extends Car implements Runnable {
public ElectricCar(String carName) {
super(carName);
}
@Override
public void run() {
System.out.println("我是:" + carName + ",我风驰电掣");
}
@Override
public void useEnergy() {
System.out.println("我是:" + carName + ",我使用电能");
}
}
代码
Animal.java
abstract class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
}
class Penguin extends Animal implements Runnable, Swimable {
public Penguin(String name) {
super(name);
}
@Override
public void run() {
System.out.println("我是:" + name + ",我摇摇晃晃地走");
}
@Override
public void swim() {
System.out.println("我是:" + name + ",我可以在寒冷的海水里游泳");
}
}
class Swan extends Animal implements Flyable, Swimable, Runnable {
public Swan(String name) {
super(name);
}
@Override
public void run() {
System.out.println("我是:" + name + ",我摇摇晃晃地走");
}
@Override
public void swim() {
System.out.println("我是:" + name + ",我游泳很优美丝滑");
}
@Override
public void fly() {
System.out.println("我是:" + name + ",我可以飞翔");
}
}

被折叠的 条评论
为什么被折叠?



