1.接口
java中接口的存在意义是:让多个继承该接口的类实现多态,让多个类有相同的特征
示例代码:
interface MyInterface{ void myMethod(); } class Test1 implements MyInterface{ @Override public void myMethod() { // TODO 自动生成的方法存根 System.out.println("test1"); } } class Test implements MyInterface{ @Override public void myMethod() { // TODO 自动生成的方法存根 System.out.println("test"); } public void test2(MyInterface me) { me.myMethod(); } public static void main(String[] args) { Test test = new Test(); test.myMethod(); Test1 test1= new Test1(); test1.myMethod(); test.test2(new MyInterface() { @Override public void myMethod() { // TODO 自动生成的方法存根 System.out.println("test2"); } }); } }
基本用法就如上,被红色标注的是接口的匿名内部实现方法,也算是一种写法了
输出如下:
test
test1
test2
2.抽象类
抽象类内部可以有完善的方法,但是不可以被实例化,只能够被间接的调用内部方法以及参数,比如在当做参数传递的时候,以及在非静态方法中使用super调用
示例代码:
abstract class MyAbstractClass{ abstract void myMethod(); void myAbstractClass() { System.out.println("hello myAbstract"); } } class Test1 extends MyAbstractClass{ @Override public void myMethod() { // TODO 自动生成的方法存根 System.out.println("test1"); } } class Test extends MyAbstractClass{ @Override public void myMethod() { // TODO 自动生成的方法存根 System.out.println("test"); } public void test2(MyAbstractClass me) { me.myMethod(); me.myAbstractClass();
super.myAbstractClass(); } public static void main(String[] args) { Test test = new Test(); test.myMethod(); Test1 test1= new Test1(); test1.myMethod(); test.test2(new MyAbstractClass() { @Override public void myMethod() { // TODO 自动生成的方法存根 System.out.println("test2"); } }); } }
基本用法和接口是一样的,只不过接口中不能有完善的方法,而且不用abstract关键字,抽象类中抽象方法一定要用abstract关键字
输出如下:
test
test1
test2
hello myAbstract
hello myAbstract
希望能够帮到大家
以上