【java】接口/多态---封装

目录

 

1.接口

1.1 java中定义的接口的格式和规范

1.2 Java中遵从接口的基本规范

1.3 接口使用骚操作

2.多态

2.1动物园

2.2 USB接口

2.3 多态总结


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 接口使用骚操作

  1. 接口可以通过 extends 关键字继承其他接口(相当于电子设备的协议兼容 USB3.1 == > USB 3)
  2. 存在继承联系的接口如果出现了相同的方法,实现类继承当前接口时,只需要完成一个。(相当于电子设备协议相同。Type-C接口)
  3. 接口中可以使用 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的!!!

返回值是接口类型,这里实际返回数据时是直接或者间接实现类对象都可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lucky__cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值