1.接口
定义接口:
package case1;
public interface Operation {
public static final int x = 0;
int sum(int a, int b);
default void defaultMethod() {
System.out.println("Jdk8后default修饰的接口可以有方法体");
}
static void staticMethod() {
System.out.println("Jdk8后static修饰的接口可以有方法体");
}
/* private void privateMethod() {
System.out.println("Jdk9之后private修饰的接口可以有方法体");
}*/
}
定义实现类:
package case1;
public class OperationImplement implements Operation {
@Override
public int sum(int a, int b) {
return a+b;
}
@Override
public void defaultMethod() {
Operation.super.defaultMethod();
System.out.println("接口实现类的实现默认修饰方法方法");
}
public void staticMethod() {
Operation.staticMethod();
System.out.println("接口实现类实现静态修饰方法");
}
}
定义测试类:
package case1;
public class Test {
public static void main(String[] args) {
OperationImplement o = new OperationImplement();
int a = o.sum(10, 20);
System.out.println(a);
o.defaultMethod();
o.staticMethod();
}
}
2.多态
多态体现的格式:
父类类型 变量名 = new 子类对象;
变量名.方法名();
注意 :当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行 的是子类重写后方法。
定义抽象类Animal:
package case3;
public abstract class Animal {
abstract void eat();
}
定义实现类dog和cat:
package case3;
public class cat extends Animal {
@Override
void eat() {
System.out.println("猫吃鱼");
}
public void catchMouse() {
System.out.println("猫抓耗子");
}
}
package case3;
public class dog extends Animal{
@Override
void eat() {
System.out.println("狗吃骨头");
}
public void watchHouse() {
System.out.println("狗看家");
}
}
定义测试类:
package case3;
public class Test {
public static void main(String[] args) {
Animal a = new cat();
a.eat();
cat c=(cat) a;
c.catchMouse();
((cat) a).catchMouse();
Animal b = new dog();
b.eat();
/* dog d=(dog) a;
d.eat();*/
}
}
3.引用类型转换
例: 笔记本电脑 笔记本电脑(laptop)通常具备使用USB设备的功能。在生产时,笔记本都预留了可以插入USB设备 的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。 定义USB接口,具备最基本的开启功能和关闭功能。鼠标和键盘要想能在电脑上使用,那么鼠标和键 盘也必须遵守USB规范,实现USB接口,否则鼠标和键盘的生产出来也无法使用。
案例分析 进行描述笔记本类,实现笔记本使用USB鼠标、USB键盘
USB接口,包含开启功能、关闭功能
笔记本类,包含运行功能、关机功能、使用USB设备功能
鼠标类,要实现USB接口,并具备点击的方法
键盘类,要实现USB接口,具备敲击的方法
①定义USB接口
package case6;
public interface USB {
void open();
void close();
}
②定义KeyBoard键盘类
package case6;
public class KeyBoard implements USB {
@Override
public void open() {
System.out.println("键盘接通");
}
@Override
public void close() {
System.out.println("键盘断开");
}
public void type() {
System.out.println("键盘打字");
}
}
③定义Mouse鼠标类
package case6;
public class Mousse implements USB {
@Override
public void open() {
System.out.println("鼠标接通");
}
@Override
public void close() {
System.out.println("鼠标断开");
}
public void click() {
System.out.println("鼠标点击");
}
}
④定义笔记本类Laptop
package case6;
public class Laptop {
public void run() {
System.out.println("电脑运行");
}
public void Useusb(USB usb) {
if (usb != null) {
usb.open();
if (usb instanceof Mousse) {
Mousse m = (Mousse) usb;
m.click();
} else if (usb instanceof KeyBoard) {
KeyBoard k = (KeyBoard) usb;
k.type();
}
usb.close();
}
}
public void shoutdown() {
System.out.println("电脑关闭");
}
}
⑤定义Test测试类
package case6;
public class Test {
public static void main(String[] args) {
Laptop laptop = new Laptop();
laptop.run();
USB u = new KeyBoard();
laptop.Useusb(u);
USB u1 = new Mousse();
laptop.Useusb(u1);
laptop.shoutdown();
}
}
tips: 为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验,格式 如下:
变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。