面向对象三大特征第三篇总结

本文深入探讨Java中static关键字的用法,包括静态方法的特点和应用场景,如工具类封装和数组操作。同时,详细解析接口的概念,如何使用及其实现机制,包括多态的应用,拓宽方法参数和返回值范围,提升代码开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.static关键

1.1static修饰惊天成员方法用途

  特征:

1.摆脱类对象,效率高,节约内存空间,提高开发效率。

2.类内成员变量和成员方法都不可以用,但是不影响使用外来数据

3.静态成员方法通常用于工具类的封装使用。

Arrays数组工具类

   sort排序方法

   binarysearch   二分法查询方法

   toString数组内容字符串展示返回方法  

数组逆序实现方法

package com.test_static;

import java.util.Arrays;

/*
 * 工具类当中大多数方法,都是静态方法
 * 自定义数组工具类
 */

class MyArrays{
	/*
	 * 工具类内方法,都是静态方法
	 */
	/**
	 * 数组工具类,数组逆序的方法
	 * @param arr 这里需要一个int类型数组
	 */
	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 java使用接口

格式

interface 接口名{

     成员变量

      成员方法

}

类【遵从】接口

      implements

    class  类名  implements  接口{

}

 

接口中成员变量和成员方法缺省属性原因:

       成员变量  缺省属性是public static final

       缺省属性  public  abstract 修饰

 

 

 

package com.test_interface;
/*
 * 接口演示
 */

interface A{
	//缺省属性  public static final修饰
	int num = 10;
	//却红色呢过属性  abstract
	public void tets();
}

class TypeA implements A{

	@Override
	public void tets() {

		System.out.println(num);
		System.out.println("TypeA遵从接口A,实现接口A中缺省属性为abstract的成员方法");
	}
	
}

public class Demo1 {
	public static void main(String[] args) {
		TypeA typeA =new TypeA();
		
		typeA.tets();
		
	}

}

2.3接口中使用方法

1.接口中的

  成员变量缺省属性  public static final

  成员方法缺省属性   public abstract

2.一个非abstract类遵从interface接口,需要强制完成接口中所有缺省属性为public abstract的成员方法

3.接口和接口之间,允许使用extends关键字继承,并且允许一个接口,继承多个接口

 

interface A extends B,C

4.接口中可以使用default关键字,default方法拥有方法体,可以认为是非强制实现方法,不要求遵从接口的 非abstract强制实现,JDK 1.8新特征

 

3

 

 3.1 接口生活化演示


从生活中映射USB接口
    interface USB
        规定USB设备必须完成的方法
        void connect();

鼠标类 implements USB 
    鼠标是一个USB设备,必须完成connect方法
键盘类 implements USB
    键盘是一个USB设备,必须完成connect方法

USB接口在电脑上,我们需要使用USB接口

 

package com.test_interface1;



/*
从生活中映射USB接口
	interface USB
		规定USB设备必须完成的方法
		void connect();

鼠标类 implements USB 
	鼠标是一个USB设备,必须完成connect方法
键盘类 implements USB
	键盘是一个USB设备,必须完成connect方法
 */
/**
 * USB接口
 * @author Anonymous
 *
 */
interface USB {
	/**
	 * 要求所有的USB设备,必须完成的方法,告知USB接口连接之后完成的
	 * 功能是什么
	 */
	void connect();
}

/**
 * 鼠标类,遵从USB接口,实现connect方法
 * 
 * @author Anonymous
 */
class Mouse implements USB {
	@Override
	public void connect() {
		System.out.println("鼠标连接USB接口,控制光标");
	}
}

/**
 * Logi类,继承Mouse鼠标类
 * 		1. 鼠标设备
 * 		2. Logi间接遵从USB接口,是一个USB设备
 * @author Anonymous
 *
 */
class Logi extends Mouse {
	@Override
	public void connect() {
		System.out.println("Logi Master 2S");
	}
}

/**
 * 键盘类,遵从USB接口,实现connect方法
 *
 * @author Anonymous
 */
class Keyboard implements USB {
	@Override
	public void connect() {
		System.out.println("键盘连接USB接口,输入设备");
	}
}

/**
 * IKBC继承Keyboard类
 * 		1. 键盘设备
 * 		2. 间接遵从USB接口,也是一个USB设备
 * @author Anonymous
 *
 */
class IKBC extends Keyboard {
	@Override
	public void connect() {
		System.out.println("IKBC C87 静音红轴");
	}
}

/**
 * PC电脑类,使用USB接口,这里需要通过USB接口连接一个USB设备
 * 
 * @author Anonymous
 */
class PC {
	/**
	 * 电脑类连接USB接口连接方法,这里需要的是一个USB设备
	 * 
	 * @param usb USB接口对应的设备
	 */
	public void usbConnect(USB usb) {
		// usb设备执行connect方法
		usb.connect();
	}
}

public class Demo1 {
	public static void main(String[] args) {
		
		// 电脑中有一个方法是使用USB接口连接USB设备
		PC pc = new PC();
		
		// 鼠标和键盘都是USB设备
		Mouse mouse = new Mouse();
		Keyboard keyboard = new Keyboard();
		
		// 电脑需要通过USB接口连接USB设备,mouse鼠标就是USB设备
		pc.usbConnect(mouse);
		// keyboard键盘也是USB设备
		pc.usbConnect(keyboard);
		
		// 传入一个Logi类对象
		pc.usbConnect(new Logi());
		// 传入一个IKBC类对象
		pc.usbConnect(new IKBC());
	}
}












3.2继承生活化演示

动物园:
    
所有的动物都可以看做是一个Animal类
狗类
    
Dog
熊猫类
    Panda
老虎类
    Tiger

方法:
    
喂食动物的方法
    获取动物的方法

package com.test_interface1;



/*
动物园:
	所有的动物都可以看做是一个Animal类
狗类
	Dog
熊猫类
	Panda
老虎类
	Tiger

方法:
	喂食动物的方法
	获取动物的方法
 */
/**
 * 动物类
 * @author Anonymous
 *
 */
class Animal {
	
}

/**
 * 狗类,为Animal动物的子类
 * @author Anonymous
 *
 */
class Dog extends Animal {
	
}

/**
 * 熊猫类,为Animal动物的子类
 * @author Anonymous
 *
 */
class Panda extends Animal {
	
}

/**
 * 老虎类,为Animal动物的子类
 * @author Anonymous
 *
 */
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();
		
		// 这里传入一个Animal类对象
		feed(animal);
		
		// 这里可以传入Dog类对象,因为Dog类对象是Animal类的子类对象
		feed(dog);
		// 这里传入的对象是Tiger类对象,Tiger类是Animal的子类
		feed(tiger);
		// 同上
		feed(panda);
		
		// 数据类型强转,
		Dog dog2 = (Dog) getAnimal();
		System.out.println(dog2.getClass());

	}
	
	/**
	 * 该方法的是喂食【动物】的方法
	 * 
	 * @param animal 需要的参数是Animal类对象
	 */
	public static void feed(Animal animal) {
		// 获取当前对象的完整包名.类名
		System.out.println(animal.getClass() + "来吃饭了!!!");
	}
	
	/**
	 * 返回【动物】类对象的方法
	 * 
	 * @return Animal类对象
	 */
	public static Animal getAnimal() {
		// return new Animal();
		return new Dog();
		// return new Tiger();
		// return new Panda();
	}
}











 

 

3.3 多态

 父类的引用指向子类的对象

或者说接口的引用指向遵从接口的类对象

 

作用:

   1.拓宽方法的参数范围

例如:
            方法参数为Animal类型
            可以传入Animal类型本身,或者去子类对象都可以
            方法参数为USB接口类型
            只要是直接或者间接遵从USB接口的类对象可以作为方法的参数传入

 

  2.拓宽方法的返回值范围

  3.简化代码开发,提高开发效率,整合数据 类型

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值