接口 类 并列关系
接口(规范)
jdk8.0以前
- 属性均默认为 public static final
- 函数均默认为 public abstract 所以不能有函数体 接口的函数通过类的实现覆盖来使用
- 接口与接口之间可以继承,且可以多继承 这时继承关键字是 extends 而不是 implements (含有构造器的stuff只能单继承,不含的都可以多继承)
jdk 8.0以后
- 可以有静态方法 public static 1.只能被接口本身调用且继承接口的子类也不行
- 默认方法 public default(预设,默认)
1.只能通过实现类的对象手动来调用 2.可以被子类重写 3. !!!不同于代码块 (类的对象创建时自动被调用)
class person
{
int x=1;
}
interface example
{
int x=0;
}
class doctor extends person implements 接口1,接口2,接口3{
函数实现体
// person的x:
super.x
//example的x:
example.x //默认全局静态变量
}
同名函数或属性冲突时
1.若接口与父类出现同名函数,不会报错,且默认优先调用父类函数
2.同名函数不同于同名属性,若出现指向不明的同名属性,会报错
3.若继承多个接口,且不同接口中出现同名函数,会有冲突
解决办法:在实现类(子类)中重写函数才行
在子类中调用父类的同名函数:
super.function();
在子类中调用接口的默认函数 若是此默认函数与父类同名就需要用到下面的调用方式
!!!!!接口.super.function();
public class first
{
public static void main(String[] args)
{
comparecircle one=new comparecircle(3.6);
comparecircle two=new comparecircle(3.9);
circle three=new circle(2.4);
Object check=new comparecircle(2.4); //尽管在这里进行隐示转换,但是下面的比较是将原类型与comparecircle比较,因此返回true
boolean master=check instanceof comparecircle; //instanceof 使用的范围局限于 类类型 左边必须是右边对象或子类的实例才是true,
//类似于只能说儿子像爸爸,不能说爸爸像儿子 // 左边是右边对象的父类实例返回是false!
System.out.println(master);
System.out.println("\t where are you ?"+one.comparetosth(two));
}
}
----circle类----
public class circle {
private Double circle;
public circle(Double circle){
this.circle=circle;
}
public Double getCircle() {
return circle;
}
}
---comparecircle----
public class comparecircle extends circle implements compareto {
public comparecircle(Double circle) {
super(circle);
}
@Override
public int comparetosth(Object sb) { //传参处 实现多态性,若需调用子类特有函数,记得进行强制转换后方能使用
if (this==sb)
return -3;
else if (sb instanceof comparecircle)
{
circle example=(circle)sb; //一定要实现类型转换,因为穿对象时被隐示转换为object对象,否则无法调用circle的扩展行为
return this.getCircle().compareTo(example.getCircle());
}
else
{
return -2;
}
}
}
----compareto---
public interface compareto {
public int comparetosth(Object sth);
}