1.静态static和注意点
例:
public class Demo1{
public static void say(){
System.out.println(“thisIsShenz”);
}
public void run(){
System.out.println("jump");
}
public static void main(String[] args){
//方法一
Demo1.say();
//方法二
Demo1 d1 = new Demo1();
d1.say();
d1.run();
}
}
例如在上面的例子中,方法一Demo1并不需要实例化,直接就可以调用,而在方法二中。实例个体也可以调用say();方法。
从这里就可以看出对于编译顺序而言static_fun > constructed_fun > trends_fun
静态变量也类似,并且静态变量也是公用的。
例如:
public class Demo1{
private static String name;
public Demo1(String name){
this.name = name;
}
public static void show(){
System.out.println("+++++++++"+name);
}
public static void main(String[] args){
Demo1 d1 = new Demo1("张三");
Demo1 d2 = new Demo1("李四");
d1.show();
d2.show();
}
}
从这个例子发现,如果是静态方法,必须引用静态变量,因为在编译class文件时就已经确定static方法了,如果是动态变量,则出错。并且两个实例产生的值都是李四,说明static String name的内存是指向同一个,才产生了覆盖。
2.继承extends
继承是指一个类继承了另一个类的属性,方法。并具有override的作用。
例如:
父类:
public class Demo{
private String name;
public Demo(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
子类:
public class Demo1 extends Demo{
public Demo1(String name){
super(name);
}
public void show(){
System.out.println("++++++++"+getName()+"***********"/*+name*/);
}
public String getName(){
return "override";
}
public static void main(String[] args){
Demo1 d1 = new Demo1("张三");
d1.show();
}
}
发现两个注意事项,一、子类不能调用父类的private的元素和方法,但是调用赋值,例如: String name1 = name; 这是能赋值成功的。二、子类重写父类方法后将调用子类方法。
3.抽象类abstract
抽象类是用abstract修饰的类,格式为:
public abstract class Demo{
public abstract void Jump(String name);
public String getName(){
return this.name;
}
}
在Jump为抽象类的抽象方法,抽象类只是类的一种特殊情形,由于不知道所调用的具体情况,不给出具体的实现方法,而在子类进行方法的具体实现,对于程序的设计和优化有帮助,实例化的时候可以调用子类的构造器。
superClass sc = new sonClass();
sc.Jump();