Day7-2020-7-24 接口 多态 转型

接口

接口是一种引用数据类型

格式 public interface 接口名称{ 内容}
接口内容:

  • 常量
  • 抽象方法
  • 默认方法
  • 静态方法
  • 私有方法

接口抽象方法 --abstract(抽象)

public interface 接口名称{ 抽象方法}

//接口抽象方法
public interface Abs {
	
	public abstract void abs();
}

接口抽象方法 的实现
public class 实现类名 implements 接口类{}


public class AbsImpl implements Abs{

	@Override
	public void abs() {
		// TODO Auto-generated method stub
		System.out.println("方法实现");
	}
	

}

接口默认方法–default(默认)

public default 返回值类型 方法名称 (参数列表){方法体}
接口的默认用于接口的升级,使得接口添加新方法后已经实现的接口类不会一一修改
接口类

public interface Abs {
	//接口抽象方法
	public abstract void abs();
	
	//接口默认方法
	public default void abs1() {
		System.out.println("这是一个默认方法!");
	}
}

接口实现

public class AbsImpl implements Abs{

	@Override
	public void abs() {
		// TODO Auto-generated method stub
		System.out.println("方法实现");
	}
}

主类

public class Main0 {

	public static void main(String[] args) {
	AbsImpl impl=new AbsImpl();
	impl.abs();
	
	AbsImpl impl2=new AbsImpl();
	impl2.abs1();
	 
	}
}

实现结果

方法实现
这是一个默认方法!

接口的默认方法可以重写
接口实现类重写方法

public class AbsImpl implements Abs{

	@Override
	public void abs() {
		// TODO Auto-generated method stub
		System.out.println("方法实现");
	}

	@Override
	public void abs1() {
	System.out.println("重写默认方法!");
	}
}

运行结果

方法实现
重写默认方法!

接口的静态方法–static(静态)

注:静态方法和对象无关,和类有关

  • 不能通过接口实现类的对象来调用接口当中的静态方法
  • 调用:直接通过接口名称.静态方法调用
    接口类
//接口静态方法
	//接口静态方法
	public interface Abs {
	public static void abs2() {
		System.out.println("接口静态方法!!");
	}
}

接口静态类调用–主方法

public class Main0 {

	public static void main(String[] args) {
	//静态方法调用
	Abs.abs2();
	
	}
}

运行结果

接口静态方法!!

接口私有方法

解决本类中方法部分内容重复,重复部分另写一个方法用来调用,但不能被接口的实现类调用,使其私有化

  1. 普通默认私有:private 返回值类型 方法名(参数列表){方法体}
  2. 静态私有:private static 返回值类型 方法名 (参数列表){方法体}

接口成员变量

接口中也可以定义成员变量,但必须由 public static final修饰 ,相当于常量
格式:public static final 数据类型 数据名 = 数值;
使用:接口名称.变量名

注意事项:

  • 接口中的值可以忽略不写public static final ,但是默认写了
  • 接口中的变量必须赋值
  • 接口中常量的名称,使用完全的大写字母,用下划线分隔 例:NUM_MY_CLASS

接口和继承

  1. 接口是没有静态代码块和构造方法的

  2. 一个类的父类只有一个(单继承),但一个类可以同时实现多个接口
    public class Abs implements Abs1,Abs2(覆盖所有的抽象方法)

  3. 如果实现的多个接口中有相同的抽象方法(abstract),那么只需要覆盖一次即可

  4. 如果实现类没有覆盖接口中的所有抽象方法(abstract),那么这个实现类也是抽象的

  5. 如果实现类所实现的接口中有重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写

  6. 一个实现类继承的父类方法和接口中的默认方法相同,优先使用父类的方法,不用覆盖重写。

区别

  1. 类和类之间继承关系为单继承,只有一个父类
  2. 类与接口之间多实现,一个类可以实现多个接口
  3. 接口与接口之间多继承 public interface Abs extends Abs1,Abs2{}
  4. 继承的多个接口中的抽象方法重复,只需要写一个就可以
  5. 继承的多个接口中的默认方法重复,需要覆盖重写

多态

代码中体现多态性:父类引用指向子类对象
格式:父类名称 对象名 = new 子类名称();接口名称 对象名=new 实现类名称();
理解为:把猫看作动物

成员变量使用

编译看左边,运行还看左边
直接通过对象访问成员变量:看等号左边是谁,就是多少
间接通过方法访问成员变量:看方法属于谁,优先用谁,没有向上找

成员变量使用

编译看左边,运行看右边
注:先看左边有方法没,有则书写正确。运行看右边有方法没,没有向上找,有则用自己的。

看new的是谁,就优先用谁,没有则向上找

转型

向上转型 相当于多态
父类名称 对象名=new 子类名称();
例:把猫看作动物

向下转型 相当于强制类型转换
子类名称 对象名=(子类名称)父类对象名;
例:可以把猫强制类型转换(还原),由动物变为猫

判断原来是什么子类 --instanceof关键字

父类对象名 instanceof 子类名 会得到一个布尔值,来判断前面的原来是不是后面的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值