静态的概念经常出现在java程序中,系统自带类中的大部分函数是静态函数。
静态static可以用来修饰属性、方法、代码块。在类中static修饰的变量可以被该类创建的所有对象共同使用。
而不用static修饰的只被单个对象使用。前者叫类属性或类方法,后者叫实例属性或实例方法。static不能定义在方法中。
public class javabase {
static int i=5;
static {
i = 10;
System.out.println("初始化"+i);
}
public void updatei(int I){
this.i=I;
}
public void pu2(){
System.out.println(i);
}
}
void run2(){
javabase b1=new javabase();
javabase b2=new javabase();
Scanner input2 =new Scanner(System.in);
b1.updatei(input2.nextInt());
b2.updatei(input2.nextInt());
b1.pu2();
b2.pu2();
}//测试静态变量及方法
在main中运行run2,发现我们new了两个对象只初始化i一次,并且两个对象共用一个i,去用连个对象的方法修改i,发现实际上是同一个i。
下面介绍一下多态,话不多说,先上代码,定义了一个电器类,灯类,电话类,后俩继承电器类,都有电量和充电功能,子类重写了父类的充电功能,毕竟电池容量不一样。
public abstract class Ele {
private int electri;
public Ele(){
electri=50;
}
public boolean upele(){
if(electri==100){
System.out.println("充电已满");
return false;
}
electri++;
return true;
}
public class Light extends Ele{
int electri;
public boolean upele(){
System.out.println("灯泡正在充电");
if(electri==100){
System.out.println("充电已满");
return false;
}
electri++;
return true;
}
public class Phone extends Ele{
int electri;
public boolean upele(){
System.out.println("手机正在充电");
if (electri == 200) {
System.out.println("充电已满");
return false;
}
electri++;
return true;
}
public static void seephone(){
System.out.println("欢迎使用麻瓜电话");
}
这是充电这个动作,为不同的电器充电都是充电的动作,我们不能每次有了新电器都去写一个新的充电的动作,充电动作是统一的重写父类的,所以直接调用父类。
public class Oprat{
public void recharge(Ele ele) {
ele.upele();
}
}
在new对象的时候,对象的类型是父类,实际上调用子类的构造。那么再用充电这个动作处理这个对象,实际上处理的是子类的对象。这就体现了java的多态。最终输出灯泡正在充电。
Ele li=new Light();
Oprat opr=new Oprat();
opr.recharge(li);
通过上述例子,应该感觉到多态实际上是为了减少开发的工作量设计的,让代码看上去更整洁,一个父类可以对应很多很多的子类,每个子类都可能重写或继承很多个方法。针对重写的这些共性,开发的时候就不管那些子类不同的地方,直接调用父类的方法。