多态
接口
动物接口
package com.xiye.service;
/**
* Create by xiye on 2019/11/21 12:08
*/
public interface Animal {
void eat();
// 有方法体
// JDK1.8
default void sleep(){}
static void go(){}
// JDK1.9
private void show(){}
}
狗实现动物接口
package com.xiye.bean;
import com.xiye.service.Animal;
/**
* Create by xiye on 2019/11/21 12:17
*/
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("狗啃骨头!");
}
public void lookHome() {
System.out.println("狗会看家");
}
}
猫实现动物接口
package com.xiye.bean;
import com.xiye.service.Animal;
/**
* Create by xiye on 2019/11/21 16:12
*/
public class Cat implements Animal {
@Override
public void eat() {
System.out.println("猫吃鱼!");
}
public void catchMouse() {
System.out.println("猫抓老鼠");
}
}
接口
import com.xiye.bean.Dog;
import com.xiye.service.Animal;
/**
* Create by xiye on 2019/11/21 12:01
*/
public class Demo1_接口 {
/*接口:
* 关键字interface
*
* 接口中默认方法修饰符是public abstract
*
* 接口中的带有方法体的方法:
* jdk1.8,接口可以定义有方法体:默认方法是default修饰,静态方法是static
* jdk1.9还可以在接口中定义private私有方法
*
* 默认方法可以被继承使用
* dog.eat();
dog.sleep();
*
* 成员变量有默认值,定义时直接赋值变成常量????
*
*
* */
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat();
// 默认方法可以被继承调用
dog.sleep();
// 静态方法只能接口自己调用
Animal.go();
}
}
转型
import com.xiye.bean.Cat;
import com.xiye.bean.Dog;
import com.xiye.service.Animal;
/**
* Create by xiye on 2019/11/21 16:04
*/
public class Demo2_转型 {
/*
* 向上转型
* 自动转型
* 向下转型
* 强制转型
* 例如:父类想要调用子类的特有方法,父类对象必须强转子类类型
*
* */
/*
* 类型判断
* instanceof
*
* */
public static void main(String[] args) {
// 自动向上转型
Animal animal = new Dog();
// 强制向下转型
Dog dog = (Dog) animal;
// 类型判断
if (animal instanceof Dog) {
Dog d = (Dog) animal;
d.lookHome();
}else if (animal instanceof Cat) {
Cat c = (Cat) animal;
c.catchMouse();
}
}
}
多态
import com.xiye.bean.Cat;
import com.xiye.bean.Dog;
import com.xiye.service.Animal;
/**
* Create by xiye on 2019/11/21 16:28
*/
public class Demo3_多态 {
public static void main(String[] args) {
method1();
method2();
}
private static void method2() {
/*
* 多态的好处就是利用父类作为方法形式参数,不同子类都能作为方法实参进行传递
*
* */
System.out.println("多态作用:作为形参,体现其扩展性:");
Dog dog = new Dog();
Cat cat = new Cat();
showAnimal(dog);
showAnimal(cat);
System.out.println("~~~~~~~~~~~~~~");
}
private static void method1() {
/*
* 实现一个类用其父类接口作为对象类型
*
* */
System.out.println("实现一个类用其父类接口作为对象类型:");
Animal c = new Cat();
Animal d = new Dog();
c.eat();
d.eat();
System.out.println("~~~~~~~~~~~~~~");
}
public static void showAnimal(Animal a) {
a.eat();
}
}
多态接口示例
接口USB
package com.xiye.service;
/**
* Create by xiye on 2019/11/21 17:04
*/
public interface USB {
void open();
void close();
}
鼠标
package com.xiye.bean;
import com.xiye.service.USB;
/**
* Create by xiye on 2019/11/21 17:05
*/
public class Mouse implements USB {
@Override
public void open() {
System.out.println("连接鼠标");
}
@Override
public void close() {
System.out.println("关闭鼠标");
}
public void click() {
System.out.println("点击鼠标");
}
}
键盘
package com.xiye.bean;
import com.xiye.service.USB;
/**
* Create by xiye on 2019/11/21 17:05
*/
public class KeyBoard implements USB {
@Override
public void open() {
System.out.println("连接键盘");
}
@Override
public void close() {
System.out.println("关闭键盘");
}
public void press() {
System.out.println("按下键盘");
}
}
笔记本
package com.xiye.bean;
import com.xiye.service.USB;
/**
* Create by xiye on 2019/11/21 17:10
*/
public class Laptop {
public void run() {
System.out.println("打开笔记本电脑");
}
public void stop() {
System.out.println("关闭笔记本电脑");
}
public void useLaptop(USB usb) {
usb.open();
if (usb instanceof Mouse) {
Mouse mouse = (Mouse) usb;
mouse.click();
}else if (usb instanceof KeyBoard) {
KeyBoard keyBoard = (KeyBoard) usb;
keyBoard.press();
}
usb.close();
}
}
测试
import com.xiye.bean.KeyBoard;
import com.xiye.bean.Laptop;
import com.xiye.bean.Mouse;
/**
* Create by xiye on 2019/11/21 17:03
*/
public class Demo4_示例 {
public static void main(String[] args) {
Laptop laptop = new Laptop();
Mouse mouse = new Mouse();
KeyBoard keyBoard = new KeyBoard();
laptop.run();
laptop.useLaptop(mouse);
System.out.println("^_^ ~_~ >_<");
laptop.useLaptop(keyBoard);
laptop.stop();
}
}