java超基础-接口篇+多态数组
接口
接口可以理解为一些规范性的操作处理
接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来,语法
interface接口名{
//属性
//方法静态方法)
.jdk8后的接口可以有静态方法,默认方法,也就是说接口可以有方法的具体实现了。
};
package day04;
public class BB extends Template{
public void job(){
long sum=0;
for (int i = 0; i < 100000; i++) {
sum+=i;
}
}
}
interface AsA{
//这里注意一下就是 接口里面的方法都是加了abstract修饰的 我们没有必要去写的
void hi();
default void hello(){
System.out.println('hello');
}
static void bye(){
System.out.println('bye');
}
}
class类名implements接口{
自己的属性;
自己的方法;
必须实现的接口的抽象方法
};
在jdk0以前,接口所有方法都没有方法体,即都是抽象方法。
jdk8后的接口可以有静态方法,默认方法,也就是说接口可以有方法的具体实现了。
接口的应用场景
大家可能知道接口是个什么东西了,但是就是不知道如何在什么场景去使用这个接口,那么下面就带大家来具体看一下,什么时候我们才会使用接口
现在项目经理让两个程序员分别写一个类,分别是连接MySQL和Oracle的数据库,所以说,然后项目经理应该写一个接口去规范一下,然后具体由程序员去完成这个工作,去实现这个操作流程
package day04;
public interface InterfaceDB {//项目经理写的
void connect();
void close();
}
接口的实现
package day04;
import javax.jws.soap.SOAPBinding;
public class MysqlDB implements InterfaceDB{
@Override
public void connect() {
System.out.println('进行与MySQL数据库的链接');
}
@Override
public void close() {
System.out.println('进行与MySQL数据库的断开');
}
}
给我的感觉就是接口好似是一种认为分配给你去做,然后你就去完成这个操作,还没有开发经验,很难去实际的操作这些东西。
接口的使用细节
接口不能被实例化
接口中的所有方法都是public的,接口中的抽象方法是可以不用被abstract
我们这样证明了其实是public的
一个普通类实现该接口,就必须将该接口的所有方法都去实现才行。不能只写一个可以输入alt+enter进行补全
抽象类去实现接口时,可以不实现接口的抽象方法。
一个类可以同时实现多个接口
举例说明
接口中的属性,只能是final的而且只能是被publicstaticfinal修饰的下面举例说明
interface B{
int a=10;//实际上是 public static final int a=10; 必须在一开始就赋值才行
}
…接口中属性的访问形式:接口名.属性名
一个接口不能继承其他的类,但是可以继承多个接口,因为接口和类直接是实现关系,不是继承关系!!!!!
接口的修饰符,只能是public和default,这一点和类的修饰符是一样的,下面举例说明
接口小练习
看一下下面语句都输出什么
package day04;
public class InterfaceDetails01 {
public static void main(String[] args) {
B b = new B();
System.out.println(B.a);//23
System.out.println(b.a);//23 因为这个b已经实现了这个方法所以说是可以进行访问的 并且我们知道这个接口里面的属性是public static final修饰的所以说是可以通过类名进行访问的
System.out.println(A.a);//23
}
}
interface A{
int a=23;
}
class B implements A{
}
接口VS继承
我们通过抛出一个问题来进行解决处理,引出一个小故事,
有一个小猴子,天生具有爬树的能力,但是有一天,看到鱼儿可以在水中游泳,什么羡慕,希望自己也可以学会,然后又看到鸟儿在控制飞翔,自己也想拥有这种飞翔的能力,所以小猴子问老猴子,自己如何才能学到这些本领,老猴子呵呵一笑,说你把这些接口都实现了,就行啦。
好了有些扯,现在进入正言,小猴子踏上了学习之路
package day04;
public class ExtendsVSInterface {
public static void main(String[] args) {
littleMonkey littleMonkey = new littleMonkey('悟空');
littleMonkey.fly();
littleMonkey.swim();
littleMonkey.climbing();
}
}
class Monkey{
private String name;
public void climbing(){
System.out.println(name+'天生就会爬树');
}
public Monkey(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class littleMonkey extends Monkey implements Fly,Swim{//这个时候小猴子已经继承了父亲的爬树能力
public littleMonkey(String name) {
super(name);
}
@Override
public void fly() {
System.out.println(getName()+'通过后天的努力正在学习飞翔');
}
@Override
public void swim() {
System.out.println(getName()+'通过后天的努力正在学习水下功夫');
}
}
interface Fly{
void fly();
}
interface Swim{
void swim();
}
总结一下由于我们java里面不存在多继承,但是存在一种局限就是,子类的所拥有的能力就会显得很少,就像我们今天的例子一样,父亲不会,游泳和飞翔,但是子类需要学习,那么这个时候接口就显得尤为重要了当然这也是我个人的观点存在在里面,希望大家可以参考一下我的理解。
小结一下
接口更加灵活于继承,继承是满足isa比如说小猫is动物,而接口只需要满足likea的关系才行likea的意思是指小猫可以像鸟儿一样飞翔小猫可以像鱼儿一样游泳。接口的价值在于可以设计好各种规范然后让其他类去实现这些方法,显得更加灵活。继承价值在与解决代码的复用性和可维护性
接口多态的特性
接口多态的特性就是说,
接口类型的变量可以指向实现了该接口的对象实例
package day04;
public class InterfacePolyParameter {
public static void main(String[] args) {
IF if1=new Monster();
IF if2=new Car();//是不是看出来了 就是 接口类型的变量可以指向实现了该接口的对象实例
}
}
interface IF{
}
class Monster implements IF{
}
class Car implements IF{
}
继承体现的多态
父类类型的变量,可以指向继承了该父类的对象实例
多态数组
这个的意思就是说我刚刚不是说我们的接口类型的变量可以指向实现这个接口的对象实例那么我们定义一个接口类型的数组,
把我们这几个实现这个接口的对象放到这个数组里面去,那么我们就可以进行实现操作了。
下面是代码的演示
package day04;
public class InterfacePolyParameter {
public static void main(String[] args) {
//多态数组 因为这个数组里面放了 不同的类 接口类型数组
Usb[] usbs=new Usb[2];
usbs[0]=new Phone();
usbs[1]=new Camera();//既可以放不同类的实例
for (int i=0;i接口的多态传递现象
那么我们如何操作使这个代码成立那我们只需要让IG去继承IF就行
接口小练习
要求我们掌握这个调用属性会不会调用父类和接口的属性切记接口里面的属性默认是Publicstaticfinal的
多态数组
这个的意思就是说我刚刚不是说我们的接口类型的变量可以指向实现这个接口的对象实例那么我们定义一个接口类型的数组,
把我们这几个实现这个接口的对象放到这个数组里面去,那么我们就可以进行实现操作了。
下面是代码的演示
package day04;
public class InterfacePolyParameter {
public static void main(String[] args) {
//多态数组 因为这个数组里面放了 不同的类 接口类型数组
Usb[] usbs=new Usb[2];
usbs[0]=new Phone();
usbs[1]=new Camera();//既可以放不同类的实例
for (int i=0;i接口的多态传递现象
那么我们如何操作使这个代码成立那我们只需要让IG去继承IF就行
接口小练习
要求我们掌握这个调用属性会不会调用父类和接口的属性切记接口里面的属性默认是Publicstaticfinal的
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点
量化策略建模2023-05-09
你错了,只有停了的钟才会一天对二次。一只不准的钟,一年都不一定对一次。在股票里,能停下来也是一种能力。