很早的笔记翻出来,把之前学习java比较迷茫的部分小小的总结了一下。
为什么引入接口?
因为java不支持多重继承(子类只能有一个父类), 即a extends b,c是错误的。接口就是特殊的抽象类,不过接口比抽象类更加抽象。
为了克服java单继承的缺点,一个类可以实现多个接口,使用关键字interface来定义一个接口。接口定义跟类的定义非常相似,分为接口声明和接口体。
Interface 接口名
{
接口体(主要包括抽象方法和常量)
Public static final int MAX=100;
//等价于int MAX=100;
Public abstract void add();
//等价于void add();
Public abstract float sum(float x,float y)
//等价于float sum(float x,float y)
Public default int max(int a,int b)
{
//default方法
return a>b?a:b;
}
}
使用这个标准的类就是接口的使用者,实现这个接口的类就是这个接口的实现者。
接口的出现把使用者(使用这个标准的类)和实现者(实现这个标准的类)之间的直接联系转换为间接联系。把强耦合转化为弱耦合。实现了解耦。(比如:电脑如果没有USB接口,鼠标坏了就无法更换,那么USB接口就实现了解耦功能。)面向抽象编程思想
JDK8以后,接口体允许出现了default关键字。default可以用带方法体的实例方法。
static方法,是一个类方法,不是抽象方法。类方法是有方法体的
JDK9以后,允许在接口体中定义private的方法,目的是配合接口中default的实例方法,即接口可以将某些算法封装在private方法中,供接口中的default的实例方法调用,实现算法的复用。
接口是特殊的类,但不是类,一个类生成一个.class文件,一个接口也是如此。
接口没有构造函数,生来就是被继承(implements)的。
如何使用接口?
首先定义一个interface,然后在interface里写对应的方法,如下:
接着在另外一个类里面继承这个接口并且复写,实现这个接口里面的方法
最后在其他类调用实现接口的类的方法。
输出如下:
接口都有对应的实现类和调用类,调用类调用实现类里面的方法,但是实现类里的方法实现不是唯一的,调用类可根据业务需求调用实现类。
Java的多态:
根据参数的不同执行不同的方法。
new运算符(对象):
如何创建对象
printiml是我写好的一个类,a是我创建的一个对象
但是我发现一个有意思的事情:
这样为什么不报错,printiml引入了print接口,所以可以用print进行声明,接口是可以声明的!
!反过来则不行,因为接口并不是类,类描述对象的属性和方法,而接口则包含类要实现的方法
//声明的对象a,接口也可以声明对象,但是不能创建对象
//printiml类创建的对象a,人类相当于print,人类有属性和行为,薛之谦相当于a,高大上点叫对a进行实例化
new运算符返回它所创建的对象的引用。此引用通常被分配给一个合适的类型的变量,如:Point originone =new Point(23,94);
orginone就等价于Point(23,94)
输入数据要用new——实例化对象,创建内存
Scanner reader = new Scanner(System.in);
Scanner是一个类,reader为创建的一个Scanner的对象,new就创建了这个实例,为其分配变量。
输入的基本类型数据:nextBoolean(),nextByte(),nextShort(),nextInt(),nextLong(),nextFloat(),nextDouble()。
其用法为:Scanner reader = new Scanner(System.in);//先创建对象,然后再使用
int x = reader.nextInt();
这里reader就等价于System.in