目录
1.接口
1.1 java中定义的接口的格式和规范
关键字:
interface UI ==> User Interface
定义接口的格式:
interface 接口名 {
成员变量;
成员方法;
}
接口规定数据,不能改变
接口指定的规范,由别人实现
interface A {
//成员变量
//接口中的缺省属性/默认属性 public static final
int num = 0;
//成员方法
//接口中成员方法缺省属性/默认属性 public abstract
void test();
}
1.2 Java中遵从接口的基本规范
关键字
implements
格式
class TypeA implements A {
//要求当前遵从接口A的实现类,必须完成接口中所有的缺省属性abstract修饰的方法
}
1.3 接口使用骚操作
- 接口可以通过 extends 关键字继承其他接口(相当于电子设备的协议兼容 USB3.1 == > USB 3)
- 存在继承联系的接口,如果出现了相同的方法,实现类继承当前接口时,只需要完成一个。(相当于电子设备协议相同。Type-C接口)
- 接口中可以使用 default 关键字来描述默认方法。当前默认方法可以有方法体,实现类非强制要求完成。JDK1.8特征
eg:代码
package com.cc.interface_status;
interface A {
void test();
}
interface B {
void test();
}
/**
* 接口可以通过extends关键字继承其他接口,并且允许接口之间的多继承。
* @author 陈聪聪
*
*/
interface C extends A,B {
}
class TypeA implements C {
@Override
public void test() {
// TODO Auto-generated method stub
System.out.println("不同接口之间存在相同方法,完成一次相同方法即可");
}
}
public class Demo1 {
}
2.多态
2.1动物园
第一个问题:
请问动物能不能看做是一个类? 可以
第二个问题:
熊猫,老虎,猴子请问能不能各自看作是一个类? 可以
第三个问题:
熊猫,老虎,猴子 请问是不是动物? 是
package com.cc.interface_;
/**
* 动物类
* @author 陈聪聪
*
*/
class Animal {
}
/**
* 熊猫类,是动物的子类
* @author 陈聪聪
*
*/
class Panda extends Animal {
}
/**
* 老虎类,是动物的子类
* @author 陈聪聪
*
*/
class Tiger extends Animal {
}
/**
* 程序猿类,是动物的子类
* @author 陈聪聪
*
*/
class CodingMonkey extends Animal {
}
public class Demo2 {
public static void main(String[] args) {
Animal animal = new Animal();
Panda panda = new Panda();
Tiger tiger = new Tiger();
CodingMonkey codingMonkey = new CodingMonkey();
//当前方法传入一个Animal类对象,符合当前方法参数要求
feedAnimal(animal);
//当前方法传入一个Panda类对象,Panda类对象是Animal类的一个子类,也是动物
feedAnimal(panda);
//当前方法传入Tiger对象
feedAnimal(tiger);
/*
* 强制类型转换!!!
* 当前方法的返回值数据类型是Animal类型,但是实际上数据类型是CodingMonkey类型
* 这里可以使用强制类型转换,将Animal类型包装的CodingMonkey对象,真正的看作是
* CodingMonkey
*
* 引用数据类型的强制类型转换,是允许大家使用操作的。前提是保证数据类型强转的合理性。
*/
CodingMonkey codingMonkey2 = (CodingMonkey) getAimal();
System.out.println(codingMonkey2.getClass());
CodingMonkey codingMonkey3 = (CodingMonkey) getUSB();
System.out.println(codingMonkey3.getClass());
}
private static USB getUSB() {
// TODO Auto-generated method stub
return (USB) new CodingMonkey();
}
private static Animal getAimal() {
// TODO Auto-generated method stub
return new CodingMonkey();
}
private static void feedAnimal(Animal animal) {
//getClass() 展示当前类对象完整的包名。类名
System.out.println(animal.getClass() + "来吃饭了");
}
}
2.2 USB接口
package com.cc.interface_;
/**
* USB接口
* @author 陈聪聪
*
*/
interface USB {
void connect();
}
class KeyBoard implements USB {
@Override
public void connect() {
System.out.println("键盘敲烂,月薪过完");
}
}
/**
* 键盘类的子类
* Filco 类是不是USB设备。这里间接遵从USB接口
* @author 陈聪聪
*
*/
class Filco extends KeyBoard {
@Override
public void connect() {
System.out.println("Filco 茶轴");
}
}
class Mouse implements USB {
@Override
public void connect() {
System.out.println("鼠标 :今天也要努力鸭~~~");
}
}
class Logi extends Mouse {
@Override
public void connect() {
System.out.println("罗技 G502");
}
}
class PC {
/**
* PC类连接使用USB接口的方法,这里需要【USB设备】连接的是一个USB接口
* @author 陈聪聪
*
*/
public void useUsbInterface(USB usb) {
usb.connect();
}
}
public class Dem03 {
public static void main(String[] args) {
KeyBoard keyBoard = new KeyBoard();
Mouse mouse = new Mouse();
PC pc = new PC();
/*
* 电脑连接USB设备,通过useUsbInterface方法,该方法参数是USB接口数据类型
* 这里需要通过USB接口,去连接USB设备
*/
pc.useUsbInterface(keyBoard);
pc.useUsbInterface(mouse);
pc.useUsbInterface(new Filco());
pc.useUsbInterface(new Logi());
}
}
2.3 多态总结
父类的引用指向子类的对象
接口的引用指向遵从接口的实现类对象
这就是多态!!!
多态作用 :
1.拓宽方法的返回值范围!!!【常用】
参数类型要求是父类,这里传入父类对象或者其子类对象,也可以满足方法的要求
参数类型要求是接口,这里传入直接或者间接的接口实现类对象,也是OK的!!!
2.拓宽方法的返回值范围!!!【常用】
返回值类型是父类对象,这里实际返回数据时是父类对象或者子类对象也是OK的!!!
返回值是接口类型,这里实际返回数据时是直接或者间接实现类对象都可以