学点儿Java_Day8_接口、final、static、工具类

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(){
		
	}
}

4 工具类

Math、ArrayUtil等
① 工具类里面的方法都是静态方法,方法之间没有关联。
② 工具类的构造方法私有,禁止外界new对象访问,只能通过类名.方法方式访问
|
|
单例模式:
这个类不应该有多个实例,只应该有一个
构造方法私有 ,外界不能new
在类的内部new一个 就实现了单例

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值