面向对象三大特征第三讲
1. static关键字
1.1 static修饰静态成员方法用途
特征:
1. 摆脱类对象,效率高,节约内存空间,提高开发效率
2. 类内成员变量和成员方法都不可以使用,但是不影响使用外来数据。
3. 静态成员方法通常用于工具类的封装使用。
Arrays数组工具类
sort排序方法
binarySearch 二分法查询方法
toString 数组内容字符串展示返回方法
package com. qfedu. a_static;
import java. util. Arrays;
class MyArrays {
public static void reverse ( int [ ] arr) {
for ( int i = 0 ; i < arr. length / 2 ; i++ ) {
int temp = arr[ i] ;
arr[ i] = arr[ arr. length - 1 - i] ;
arr[ arr. length - 1 - i] = temp;
}
}
}
public class Demo1 {
public static void main ( String[ ] args) {
int [ ] arr = { 1 , 3 , 5 , 7 , 9 , 2 , 4 , 6 , 8 , 10 } ;
MyArrays. reverse ( arr) ;
System. out. println ( Arrays. toString ( arr) ) ;
}
}
1.2 static修饰静态代码块
特征:
1. static修饰的静态代码块,不能使用this关键字,不能使用类内的非静态成员
2. static修饰的静态代码块,可以使用类内的其他静态成员‘
3. static修饰的静态代码块中,定义的变量都是局部变量,静态代码块。首先是是一个代码块,拥有代码块的特征,其次才是通过static修饰之后,可以随着类文件的加载直接运行,有且只运行一次
static {
int num = 10;
num = 20;
}
2. 接口
2.1 生活中的接口
生活中比较常见的接口:
USB接口,国标插座,Type-C, 3.5MM, ARJ45, Lighting接口, HDMI, VGA, SATA, M.2, DisplayPort,雷电口, PCI-E
这些接口有什么作用?
USB接口 USB-A
1. 鼠标连接,键盘连接,声卡连接,麦克风,摄像头,补光灯,U盘,移动硬盘
2. 规范,都是USB设备
3. 设备本身决定了,要做什么事情。
2.2 Java中接口使用
格式:
interface 接口名 {
成员变量
成员方法
}
类【遵从】接口
implements
class 类名 implements 接口 {
}
接口中成员变量和成员方法缺省属性原因
从生活角度
USB接口规定了尺寸和连接方式,但是该接口做什么内容,是由设备决定的!!!
尺寸是固定 ==> 成员变量 缺省属性是public static final
设备做什么事情,不管但是规定连接方式 ==> 成员方法,需要设备自己完成
缺省属性 public abstract修饰
2.3 接口使用总结
1. 接口中的
成员变量缺省属性 public static final
成员方法缺省属性 public abstract
2. 一个非abstract类遵从interface接口,需要强制完成接口中所有缺省属性为public abstract的成员方法
3. 接口和接口之间,允许使用extends关键字继承,并且允许一个接口,继承多个接口
interface A extends B, C
生活中: 协议直接的向下兼容问题
4. 接口中可以使用default关键字修饰方法,default方法拥有方法体,可以认为是非强制实现方法,不要求遵从接口的非abstract强制实现,JDK1.8新特征
3. 多态
3.1 接口生活化演示
从生活中映射USB接口
interface USB
规定USB设备必须完成的方法
void connect();
鼠标类 implements USB
鼠标是一个USB设备,必须完成connect方法
键盘类 implements USB
键盘是一个USB设备,必须完成connect方法
USB接口在电脑上,我们需要使用USB接口
package com. qfedu. c;
interface USB {
void connect ( ) ;
}
class Mouse implements USB {
@Override
public void connect ( ) {
System. out. println ( "鼠标连接USB接口,控制光标" ) ;
}
}
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 ( "键盘连接USB接口,输入设备" ) ;
}
}
class IKBC extends Keyboard {
@Override
public void connect ( ) {
System. out. println ( "IKBC C87 静音红轴" ) ;
}
}
class PC {
public void usbConnect ( USB usb) {
usb. connect ( ) ;
}
}
public class Demo1 {
public static void main ( String[ ] args) {
PC pc = new PC ( ) ;
Mouse mouse = new Mouse ( ) ;
Keyboard keyboard = new Keyboard ( ) ;
pc. usbConnect ( mouse) ;
pc. usbConnect ( keyboard) ;
pc. usbConnect ( new Logi ( ) ) ;
pc. usbConnect ( new IKBC ( ) ) ;
}
}
3.2 继承生活化演示
动物园:
所有的动物都可以看做是一个Animal类
狗类
Dog
熊猫类
Panda
老虎类
Tiger
方法:
喂食动物的方法
获取动物的方法
package com. qfedu. c;
class Animal {
}
class Dog extends Animal {
}
class Panda extends Animal {
}
class Tiger extends Animal {
}
public class Demo2 {
public static void main ( String[ ] args) {
Animal animal = new Animal ( ) ;
Dog dog = new Dog ( ) ;
Tiger tiger = new Tiger ( ) ;
Panda panda = new Panda ( ) ;
feed ( animal) ;
feed ( dog) ;
feed ( tiger) ;
feed ( panda) ;
Dog dog2 = ( Dog) getAnimal ( ) ;
System. out. println ( dog2. getClass ( ) ) ;
}
public static void feed ( Animal animal) {
System. out. println ( animal. getClass ( ) + "来吃饭了!!!" ) ;
}
public static Animal getAnimal ( ) {
return new Dog ( ) ;
}
}
3.3 多态
多态
父类的引用指向子类的对象
或者说接口的引用指向遵从接口的类对象
这就是多态
作用:
1. 拓宽方法的参数范围
例如:
方法参数为Animal类型
可以传入Animal类型本身,或者去子类对象都可以
方法参数为USB接口类型
只要是直接或者间接遵从USB接口的类对象可以作为方法的参数传入
2. 拓宽方法的返回值范围
3. 简化代码开发,提高开发效率,整合数据类型