JDK8:
1- 全局常量:public static final (这些都可以省略)
2- 抽象方法:public abstract (这些都可省略)
3- 静态方法:public static void (public可以略)
4- 默认方法:public default void (public可以略)
接口和父类内容代码块
接口代码块
/*
这个是JDK8的interface
特性:除了"全局常量"、"抽象方法"+还有"静态方法"、"默认方法"
*/
public interface interface_new {
//静态方法
public static void method1() {
System.out.println("我是静态方法");
}
//默认方法——有写权限
public default void method2() {
System.out.println("我是默认方法");
}
//默认方法--不写权限
default void method3() {
System.out.println("我是默认方法,略写版本--接口");
}
}
父类代码块
/*
测试-父类和接口中都有,同名同参数"方法"的使用---用谁
*/
public class SuperClass {
public void method3() {
System.out.println("我是默认方法----父类");
}
}
一个小游戏,帮组对接口的理解,不理解的时候,可以选择看这个
/*
这个是一个对,接口的加深理解
1-问题:
你老婆、老妈调水里,救谁的问题?
2-解决方法:
你听你老爸的话--OR--自己选择救谁
*/
//老妈的求救
interface Mom {
public default void help() {
System.out.println("救你老妈--");
}
}
//老婆的求救
interface Wife {
public default void help() {
System.out.println("救你老婆,我给你生孩子--");
}
}
//老爸的注意
class Dad {
public void help() {
System.out.println("听爸爸说:救你老妈");
}
}
//情况1---不停老爸的话,自己选择
class HelpWho_Test implements Mom,Wife {
@Override
public void help() {
Mom.super.help();//救老妈
Wife.super.help();//救老婆
System.out.println("我也不知道救谁呀");
}
}
//情况2:听老爸的话
class HelpWho_Test2 extends Dad implements Mom,Wife {
//如果你继承了,你父亲的话,就不用纠结,肯定听父亲的话
/*
想表达的是:
实现到两个接口的"同参数,同名"的方法时,要做重写的选择
但是在上面的情况遇到的时候,你继承了父类"同参数,同名"的方法时,就直接听父的话了
*/
}
主代码块
/*
测试"interface_new"
*/
public class SubClassTest {
//2-去测试SubClass和interface_new
public static void main(String[] args) {
SubClass subClass = new SubClass();
//问题1:调不出接口中的静态方法
//总结:接口中定义的静态方法,只能通过接口来调用
//subClass.method1();--调静态(不行)
interface_new.method1();//--接口调静态,(可以)
//问题2:要调用默认的方法
//总结:用实现类的对象,可以调用接口中的默认方法
//附加:如果实现类重写类接口中的默认方法,调用的时候,调用的是"重写后"的方法
subClass.method2();
subClass.method3();
//问题4:父类和接口中都有,同名同参数"方法"的使用---用谁?
//如果:子类(实现类)没有重写这个方法,调用的就是父类的方法
//附加:和前面的父类和接口没有区别,区分开 +(这里是有父类优先的)---》 类优先原则
//这里那method3做比较(前提,没有重写过)
subClass.method3();
//问题5:如果实现类,没有继承父类,而是实现类多个接口,并且多接口里面有"同名,同参数"的方法
//总结:这时候,调用"同名,同参数"的方法的时候,报错---接口冲突
//解决方法:我们要重写此方法
subClass.MyMethod();
}
}
//1-我写Subclass去实现interface_new这个接口
class SubClass extends SuperClass implements interface_new{
//问题3-实现接口的方法,可以重写吗
//回答:可以重写
public void method2() {
System.out.println("我是默认方法--被重写类 ");
}
public void method3() {
System.out.println("太多人要我,我是被重写的method3");
}
//重点
public void MyMethod() {
method3();//调用自己"重写"的方法
super.method3();//调用父类中声明的
interface_new.super.method3();//调用接口中的"默认"方法
}
}