1 接口interface
1.1 概念
接口是一个纯粹的抽象类(接口里面所有的方法都是抽象方法)
接口就是一个规范(标准),他没有提供任何是实现,具体的功能由实现接口的子类去实现。
接口就是一个规范,可插拔(可以被替换,首先定义一个标准(接口),大家都遵守这个标准,就可以实现互相之间替换)
① 接口是一个纯粹的抽象类,接口里面的方法都是抽象方法:public abstract
② 接口里面所有的属性:(public static final) double PI = 3.14;
接口中的所有属性**是且总是(public static final)**,final见后面
1.2 接口理解、接口与抽象类(继承)
灯泡的接口 与 各种白炽灯钨丝灯之间的关系
计算机主板上CPU、内存插口 与 各种CPU和内存之间的关系
即接口(的具体实现)可插拔(对应不同型号的钨丝灯、各种CPU内存条),而接口不变
如何选择接口还是抽象类
① 继承是严格的父子关系,你继承什么你就是什么:鸽子就是鸟。
父类是抽取了所有子类的共同特征,父类里面的属性和方法是所有子类所共有的属性和方法。
② 接口是一个标准,一般用在能不能具有某个功能。
把能不能飞定义称为一个接口IFly,实现了这个接口的类就具有了这个功能。
//argument: 参数
public static void main(String[] args) {
GeZi geZi = new GeZi();
geZi.egg();
geZi.fly();
geZi.gugujiao();
//多态: 声明成父类类型,new子类对象
AbstractBird bird = new GeZi();
bird.egg();
//bird是站在AbstractBird这个父类的角度去看new出来的DaYan
//bird.fly();
//cannot resolve method 'gugujiao' in 'AbstractBird'
//bird.gugujiao();
//站在能不能飞 IFLy的角度去看GeZi,只能看到fly()这个方法
IFly fly = new GeZi();
fly.fly();
//Cannot resolve method 'egg' in 'IFly'
//fly.egg();
//fly.gugujiao();
fly = new MiFeng();
fly.fly();
}
2 final
final总结:修饰变量、类、方法 final:最终的意思
① final变量:这个变量就不能被修改,就是常量 public static final double PI = 3.1415;
② final类:这个类就不能被继承
③ final方法:这个方法就不能被重写
3 static(静态属性、静态方法)
3.1 说明与理解
非静态的属性和方法(实例属性和方法)必须通过new对象访问,而静态的属性和方法是属于类的,在类加载到内存中就可以访问,不需要new对象就可以使用,但是可以被所有对象所共享。
小区里面业主的房子可以看成一个一个的对象,这些都是属于特定的业主所独有。但是小区里面也有一些公共设施(健身器材、绿地),这些公共设施是属于这个小区的。但是是可以被所有的业主对象所使用的。
3.2 注意点
① 静态的方法只能访问静态的方法和静态的属性(因为当前对象的实例可以没有创建,所以静态的方法是没办法调用非静态的方法和属性的)
② 静态的方法中不能写this、super关键字(因为当前的对象实例可能还没有创建,代表当前类对象的this还有代表父类对象的super可能都还没有创建)
3.3 例子
编程时我们会发现有时main方法中调用自身所在的类的其他方法时,发现无法调用,错误调用情况如下
public class Demo1{
public static void main(String[] args){
test();
}
public void test(){
}
}
原因:main方法已经声明为静态,静态方法只能调用静态方法,无法调用非静态方法test()。非静态方法可以调用静态方法。
解决方案:
① 创建一个Demo1的实例,然后通过该实例调用方法test。
public class Demo1{
public static void main(String[] args){
Demo1 d1 = new Demo1();
d1.test();
}
public void test(){
}
}
② 将test方法声明为静态,就是在void前面添加static。
public class Demo1{
public static void main(String[] args){
test();
}
public static void test(){
}
}