1.8新特征即多态
JDK1.8新特征 default关键字
JDK1.8 更新特征
default关键字可以在接口中使用,用于修饰方法,使用default关键字修饰的方法在接口中是允许有方法体
【默认方法】【非强制重写方法】
package com.qfedu.b_interface;
interface DefaultInterface {
void test();
default public void testDefault() {
System.out.println("testDefault() 默认方法,非强制重写方法");
}
default public void defaultMethod() {
System.out.println("defaultMethod() 默认方法,非强制重写方法");
}
}
class Demo implements DefaultInterface {
@Override
public void test() {
System.out.println("强制实现的test方法");
}
@Override
public void testDefault() {
System.out.println("实现类重写default方法");
}
}
public class Demo {
public static void main(String[] args) {
new Demo().test();
new Demo().testDefault();
new Demo().defaultMethod();
}
}
多态
动物之间的关系
动物能不能看作是一个类?
Animal
动物园:
老虎 是不是动物??? 是
熊猫 是不是动物??? 是
猴子 是不是动物??? 是
class Animal {
}
老虎,熊猫,猴子,能不能继承Animal类???
当然能
package com.qfedu.c;
class Animal {
}
class Tiger extends Animal {
}
class Panda extends Animal {
}
class Monkey extends Animal {
}
public class Demo1 {
public static void main(String[] args) {
Animal animal = new Animal();
Tiger tiger = new Tiger();
Panda panda = new Panda();
Monkey monkey = new Monkey();
showAnimal(animal);
showAnimal(tiger);
showAnimal(panda);
showAnimal(monkey);
System.out.println("--------------------------------");
Panda p = (Panda) getAnimal();
System.out.println(p);
}
public static void showAnimal(Animal animal) {
System.out.println(animal);
}
public static Animal getAnimal() {
return new Panda();
}
}
小总结
1. 一个方法需要的参数是父类,传入实际参数是父类对象本身,或者其子类对象都是OK的!
2. 一个方法返回值类型是父类,实际返回的数据是父类对象本身,或者其子类对象也是OK的!
3. 引用数据类型之间的强制类型转换时允许使用,但是要求明确真实数据类型是一致的,不然会导致异常出现ClassCastException
USB接口和USB设备
USB接口
规定一个方法
connect方法
键盘一个类
鼠标一个类
package com.qfedu.c;
interface USB {
void connect();
}
class Mouse implements USB {
@Override
public void connect() {
System.out.println("鼠标控制光标");
}
}
class Logi extends Mouse {
@Override
public void connect() {
System.out.println("Logi Master 2S");
}
}
class Keyboard implements USB {
@Override
public void connect() {
System.out.println("键盘敲代码");
}
}
class IKBC extends Keyboard {
@Override
public void connect() {
System.out.println("IKBC C87 270 -/+ RMB");
}
}
class Computer {
public void useUSBInterface(USB usb) {
usb.connect();
}
}
public class Demo2 {
public static void main(String[] args) {
Computer computer = new Computer();
Mouse mouse = new Mouse();
Keyboard keyboard = new Keyboard();
computer.useUSBInterface(mouse);
computer.useUSBInterface(keyboard);
computer.useUSBInterface(new Logi());
computer.useUSBInterface(new IKBC());
}
}
小总结
1. 一个方法需要的参数是USB接口,但是传入的对象是USB接口的直接实现类或者间接实现类都是完全OK
2. 代码整个过程中是完全符合生活逻辑的!!!